每种类型的变量至少使用了两种不同的编码
1 五种对象的底层编码:
字符串类型对象:REDIS_ENCODING_INT REDIS_ENCODING_EMBSTR REDIS_ENCODING_RAW
列表类型的对象:REDIS_ENCODING_ZIPLIST REDIS_ENCODING_LINKEDLIST
哈希对象:REDIS_ENCODING_ZIPLIST REDIS_ENCODING_HT
集合对象:REDIS_ENCODING_INTSET REDIS_ENCODING_HT
有序集合对象:REDIS_ENCODING_ZIPLIST REDIS_ENCODING_SKIPLIST
A:ziplist编码的哈希对象使用压缩列表作为底层实现,每个压缩列表 保存了一个整个哈希对象中的元素(将哈希中多个对象保存在一个压缩列表中 更节省空间),当由新的键值对要加入到哈希对象时,先将保存键的压缩列表节点加入到压缩列表表尾,再将保存值的压缩列表节点加入到压缩列表表尾。
同一键值对的键值节点相邻,且键在前,值在后。
先加入的键值对在压缩列表表头,后加入的在压缩列表表尾。
扫描二维码关注公众号,回复:
5639803 查看本文章
B:hashtable编码的哈希对象 使用 字典 作为底层实现,哈希对象中的每个键值对使用字典键值对来存储。
每个键是一个字符串对象,每个值是一个字符串对象
2 编码转换条件
当 A:每个键或值的 字符串元素的长度均小于64字节,且
B:列表中元素个数小于512个
时,会用压缩列表实现哈希对象。否则采用字典实现哈希对象。
API:
HSET
HGET
HEXISTS
HDEL
HLEN
HGETALL
3 命令在编码上的作用原理
根据2进行推测