每种类型的变量至少使用了两种不同的编码
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编码的列表使用压缩列表作为底层实现,每个压缩列表 保存了一个整个列表的元素(将列表中多个对象保存在一个压缩列表中 一个压缩列表由多个压缩列表节点组成,一个压缩列表节点保存一个字节数组或整数 更节省空间)
B:linkedList编码的列表 使用双端链表作为底层实现,每个双端链表节点保存了一个字符串对象,字符串对象中存储整个列表中的一个元素。使用linkedlist时,需要多个双端链表节点,每个节点中保存着对应字符串对象的指针。
2 编码转换条件
当 A:每个字符串元素的长度均小于64字节,且
B:列表中元素个数小于512个
时,会用压缩列表实现链表。否则采用双端链表实现链表。
API:
LPUSH
RPUSH
LPOP
RPOP
LINDEX
LLEN
LINSERT
LREM
LTRIM
LSET
3 命令在编码上的作用原理
根据2进行推测