1. ziplist用途
是列表键(list)和哈希键(hash)的主要底层的实现之一,当一个列表键只包含少量的列表项 并且每个列表项要么就是小整数值 要么就是长度比较短的字符串,那么redis就是会使用压缩列表做列表键的底层实现
2.压缩列表
2.1 压缩列表的结构
- zlbytes uint32_t 记录压缩列表占用的字节数,在对压缩列表进行内存的重分配或者计算zlend的时候使用
- zltail uint32_t 记录压缩列表表尾节点(entryN)距离压缩列表其实地址的偏移量 即通过起始地址+zltai 可以得到表尾节点的位置
- zlen uint16_t 记录压缩列表所拥有的节点的数量 当这个值小于UINT16_MAX(65535)时候表示的是节点的数量 如果是等于这个值那么具体的数量就要通过遍历获取
- entryx 列表节点
- zlend uint8_t 特殊值0xFF 用来标记压缩列表的结束
2.2 压缩列表节点的构成![ziplistNode](https://i-blog.csdnimg.cn/blog_migrate/c5b737597c493f2822097175f587d322.png#pic_center)
-
previous_entry_lengt