Redis 对象:列表对象

每种类型的变量至少使用了两种不同的编码

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进行推测 

你可能感兴趣的:(中间件,分布式)