redis对象类型及编码
一、String(字符串)
底层实现有三种
1.REDIS_ENCODING_INT 使用整数值实现的字符串对象
2.REDIS_ENCODING_EMBSTR 使用embstr编码的简单动态字符串实现的字符串对象
3.REDIS_ENCODING_RAW 使用简单字符串实现的字符串对象
三种底层的编码转换
1. REDIS_ENCODING_INT 整数,存储字符串长度小于21且能够转化为整数的字符串
2.embstr编码方式和raw编码方式在3.0版本之前是以小于等于39字节为分界的 而在3.2版本之后,则变成了44字节为分界
二、List列表
底层实现是两种
1.zipList 压缩列表
2.linkedList 底层采用双端链表
编码的转换
同时满足一下两个条件 使用zipList
1.列表对象保存的所有元素的长度都小于64字节
2.列表元素数量小于512个
不满足使用LinkedList编码
以上两个上限可以修改分别是list-max-ziplist-value,list-max-ziplist-entries
三、Hash哈希
底层实现是两种
1.zipList 压缩列表
2.Hashtable 底层实现字典
编码的转换
同时满足一下两个条件 使用zipList
1.哈希对象保存的所有键值对键和值的字符串的长度都小于64字节
2.哈希对象键值对数量小于512个
不满足使用hashtable编码
以上两个上限可以修改分别是hash-max-ziplist-value,hash-max-ziplist-entries
四、set集合对象
底层实现是两种
1.intset压缩列表
2.Hashtable 底层实现字典
编码的转换
同时满足一下两个条件 使用intset
1.集合对象保存的所有元素都是整数
2.集合元素数量不超过512个
不满足使用hashtable编码
第二个条件可以修改分别是set-max-intset-entries
五、zset有序集合
底层实现是两种
1.zipList 压缩列表
2.skipList 跳跃表
编码的转换
同时满足一下两个条件 使用zipList
1.有序集合保存的元素字符串的长度都小于64字节
2.有序集合保存的元素数量小于128个
不满足使用skipList编码
以上两个上限可以修改分别是zset-max-ziplist-value,zset-max-ziplist-entries
本文摘自《redis设计与实现》 黄健宏 著