对象的类型
redis中的对象包括:
字符串对象 REDIS_STRING
列表对象 REDIS_LIST
哈希对象 REDIS_HASH
集合对象 REDIS_SET
有序集合对象 REDIS_ZSET
对象的底层编码实现
REDIS_ENCODING_INT long类型的整数
REDIS_ENCODING_EMBSTR embstr编码的简单动态字符串
REDIS_ENCODING_RAW 简单动态字符串
REDIS_ENCODING_HT 字典
REDIS_ENCODING_LINKEDLIST 双端链表
REDIS_ENCODING_ZIPLIST 压缩列表
REDIS_ENCODING_INTSET 整数集合
REDIS_ENCODING_SKIPLIST 跳跃表和字典
类型与编码的对应关系
类型 | 编码方式 | 说明 |
---|---|---|
REDIS_STRING | REDIS_ENCODING_INT | 整数值实现的字符串 |
REDIS_STRING | REDIS_ENCODING_EMBSTR | embstr编码的字符串 |
REDIS_STRING | REDIS_ENCODING_RAW | 简单动态字符串的字符串 |
REDIS_LIST | REDIS_ENCODING_ZIPLIST | 压缩列表实现的列表 |
REDIS_LIST | REDIS_ENCODING_LINKEDLIST | 双端列表实现的列表 |
REDIS_HASH | REDIS_ENCODING_HT | 字典实现的哈希对象 |
REDIS_HASH | REDIS_ENCODING_ZIPLIST | 压缩列表实现的哈希对象 |
REDIS_SET | REDIS_ENCODING_INTSET | 整数集合实现的集合 |
REDIS_SET | REDIS_ENCODING_HT | 字典实现的集合 |
REDIS_ZSET | REDIS_ENCODING_SKIPLIST | 跳跃表实现的有序集合 |
REDIS_ZSET | REDIS_ENCODING_ZIPLIST | 压缩列表实现的有序集合 |
字符串对象
是整数、并可以用long表示,编码为 REDIS_ENCODING_INT
是一个字符串值,长度大于32字节,REDIS_ENCODING_RAW
是一个字符串值,长度小于等于32, REDIS_ENCODING_EMBSTR(减少内存的申请,释放操作)
要点:
EMBSTR通过一次申请连续的内存空间存储redisObject,sdshdr
释放也只需要一次
long double采用字符串存储
EMBSTR修改直接转换成raw,EMBSTR可以理解为只读
列表对象
使用压缩列表默认条件(可修改):
所保存的字符串元素长度都小于64字节
元素数量小于512个
不满足上述条件的采用双端链表实现列表对象
使用过程中不满足1.2条时,会转化底层的实现为双端
哈希对象
使用压缩列表时:
先将保存键的节点放在压缩列表的队尾,然后是保存了值的节点
所以同一键值对的节点是在一起的,键在前,值在后
先添加的在压缩列表的头部,后来的在尾部
使用字典实现哈希:
哈希对象的每个键值使用一个字典的键值表示
使用压缩列表的默认条件(可修改):
所有的键值对的键、值都小于64字节
键值对数量小于512
集合对象
可以采用整数结合、字典实现。
采用字典实现时,字典每个键都是一个集合元素,字典的值设置为null
使用整数集合的默认条件(可以修改):
所有元素都是整数
元素数量不超多512
有序集合
可以使用压缩列表、跳跃表和字典实现。
使用压缩列表:每个元素采用两个紧挨一起的节点表示,前一个表示成员,后一个表示分数。压缩列表内部按照分数大小前后排序。
使用跳跃表和字典:同时包含一个跳跃表和字典。跳跃表按照分数大小保存了所有的集合元素(包括成员、分数),字典实现了成员到分值的映射,字典的键为元素成员,值为元素的分数,能够很快找到成员的分数
通过跳跃表实现范围类型的操作。
字典实现快速查找分数
字典和跳跃表通过指针共享相同的元素的成员和分数,不会冗余
使用压缩列表的默认条件(可以修改):
元素数量小于128
元素的成员的长度都小于64字节
引用计数
redisObject结构中的refcount属性记录了对象的引用计数
object refcount key 查看引用计数
对象共享
默认初始化服务的时候新建0-9999的整数字符串进行共享
只共享整数因为对比消耗cpu少
对象空转时间
redisObject结构中的lru记录最后一次使用时间
object idletime key 查看空转时间
idletime不会更新lru
作者:峰巢
链接:https://www.jianshu.com/p/df97b0ffcb98
共同学习,写下你的评论
评论加载中...
作者其他优质文章