Redis 学习记录
Redis: Remote Dictionary Service 远程字典服务
SQL和NoSql的区别:
存储类型:
String:
存储类型: 可以用来存储字符串、整数、浮点数。
1、int:存储8 个字节的长整型(long,2^63-1)。 2、embstr: 代表embstr 格式的SDS(Simple Dynamic String 简单动态字符串), 存储小于44 个字节的字符串。 3、raw:存储大于44 个字节的字符串(3.2 版本之前是39 字节)。
应用场景: 1、热点数据缓存 2、对象缓存
redis 内部编码的转换,都符合以下规律:
编码转换在redis写入数据时完成,且转换过程不可逆,只能从小内存编码向大内存编码转换(不包括重新set)
Hash:
存储类型: 包含键值对的无序散列表。value 只能是字符串,不能嵌套其他类型。 Redis 的Hash 本身也是一个KV 的结构,类似于Java 中的HashMap。
1、ZipList(压缩列表):
当hash 对象同时满足以下两个条件的时候,使用ziplist 编码: 1)所有的键值对的健和值的字符串长度都小于等于64byte(一个英文字母 一个字节); 2)哈希对象保存的键值对数量小于512 个。
一个哈希对象超过配置的阈值(键和值的长度有>64byte,键值对个数>512 个)时,
会转换成哈希表(hashtable)。
2、HashTable(哈希表):
在Redis 中,hashtable 被称为字典(dictionary),它是一个数组+链表的结构。
应用场景: 存储对象类型的数据,如商品详情,个人详情等数据
List:
存储类型: 存储有序的字符串(从左到右),元素可以重复。可以充当队列和栈的角色。
quickList:
quicklist(快速列表)是ziplist 和linkedlist 的结合体。quicklist.h,head 和tail 指向双向列表的表头和表尾
typedef struct quicklist {
quicklistNode *head;
quicklistNode *tail;
unsigned long count;
unsigned long len;
int fill : 16;
unsigned int compress : 16;
} quicklist;
![]
Set:
存储类型: String 类型的无序集合,最大存储数量2^32-1(40 亿左右)。
intSet : 如果元素都是整数类型,就用inset 存储。 HashTable: 如果不是整数类型,就用hashtable(数组+链表的存来储结构)。如果元素个数超过512 个,也会用hashtable 存储。
SortedSet:
存储类型: sorted set,有序的set,每个元素有个score。 score 相同时,按照key 的ASCII 码排序。
zipList: 同时满足以下条件时使用ziplist 编码:1、元素数量小于128 个 2、所有member 的长度都小于64 字节,超过阈值之后,使用skiplist+dict 存储。
skipList + dict:
内存回收:
持久化策略:
RDB: RDB是Redis默认的持久化方案,当满足一定的条件,会把当前内存中的数据写入磁盘,生成一个快照文件dump.rdb。Redis可以通过加载这个文件来恢复数据。 AOF: AOF采用日志的格式来记录每个写操作,并追加到文件中。开启后,执行redis的数据命令后,就会把命令写到aof文件中去。 Redis重启时会根据日志文件的内容把写指令从前向后执行一遍,以完成数据的恢复工作。
|