压缩列表

压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么redis就会使用压缩列表来做列表建的底层实现。

压缩列表的结构

zlbytes zltail zllen entry1 entry2 ... entryN zlend
属性 类型 长度 用途
zlbytes uint32_t 4字节 记录整个压缩列表占用的内存字节数:在对压缩列表进行内存重分配,或者计算zlend的位置时使用
zltail uint32_t 4字节 记录压缩表表尾节点距离压缩列表的起始地址有多少字节:通过整个偏移量,程序无需遍历整个压缩列表皆可以确定表尾节点的地址
zllen uint16_t 2字节 记录了压缩列表包含的节点数量
entryX 列表节点 不定 压缩列表包含的各个节点
zlend uint8_t 1字节 特殊值0xFF(十进制255),用于标记压缩列表的末端

压缩列表节点的构成

previous_entry_length encoding content

previous_entry_length:以字节为单位,记录了压缩列表中前一个节点的长度。
因为节点的previous_entry_length属性记录了前一个节点的长度,所以程序可以通过指针运算,根据当前节点的起始地址来计算出前一个节点的起始地址。
encoding:记录了节点content属性所保存数据的类型以及长度
content:负责保存节点的值,可以是一个字节数组或者整数。

总结

压缩列表是一种为节约内存而开发的顺序型数据结构。
压缩列表被用作列表建和哈希键的底层实现之一。
压缩列表可以包含多个节点,每个节点可以保存一个字节数组或者整数值。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容