压缩列表是一种为节约内存而开发的顺序型数据结构。
是列表键和哈希键的底层实现之一。(包含少量列表项,列表项是小整数值或长度较短的字符串)(只包含少量键值对,值是小整数值或长度较短的字符)
是由一系列特殊编码的连续内存块组成的顺序结构.
zlbytes:记录整个压缩列表占用的内存字节数
zltail:表尾结点距离压缩列表起始位置多少字节(如果需要访问表尾结点,无需遍历整个压缩列表就可以得到表尾地址)
zllen:压缩列表中结点的数量
entryx:结点
zlend:用于标记压缩列表的尾端
previous_entry_length:
以字节为单位,记录前一个结点的长度
如果前一个结点长度小于254字节那么previous_entry_length=1字节,在这一个字节记录前一个结点的长度
如果前一个结点长度大于254字节那么previous_entry_length=5字节,将此属性第一个字节设置为0xFE(十进制254),之后四个字节保存前一个结点的长度。
因为结点的previous_entry_length属性记录了前一个结点的长度,所以程序可以通过指针运算,根据当前节点的起始地址来计算出前一个结点的起始地址
压缩列表从表向表头遍历就是此原理、
encoding:记录保存的数据类型以及长度
content:保存结点值,结点值可以是一个字节数组或者整数
eg:一个压缩列表中,有多个连续长度介于250~253字节的结点e1…eN这时,将一个长度大于254字节的的new设置为头结点,那么头结点之后所有结点的previous_entry_length都要进行空间重分配,由1字节转换为5字节,导致连锁反应。
删除结点也可能会导致连锁更新