压缩列表
压缩列表是列表键和哈希键的底层实现之一, 当一个列表键只包含少量列表项, 并且每个列表项要么就是小整数值, 要么就是长度比较短的字符串, 那么Redis就会使用压缩列表来做列表键的底层实现. 另外, 当一个哈希键只包含少量键值对, 并且每个键值对的键和值要么就是小整数值, 要么就是长度比较短的字符串, 那么Redis就会使用压缩列表来做哈希键的底层实现
1.压缩列表的构成
压缩列表是Redis为了节约内存而开发的, 是一系列特殊编码的连续内存块组成的顺序型数据结构. 一个压缩列表可以包含任意多个节点, 每个节点保存一个字节数组或者一个整数值.
属性 | 类型 | 长度 | 用途 |
---|---|---|---|
zlbytes | unit32_t | 4字节 | 记录整个压缩列表占用的内存字节数, 在对压缩列表进行内存重分配,或者计算zlend时使用 |
zltail | unit32_t | 4字节 | 记录压缩列表表尾节点距离压缩列表的的起始地址有多少字节, 通过这个偏移量, 程序无须遍历整个压缩列表就能确定表尾节点的地址 |
zllen | unit16_t | 2字节 | 记录了压缩列表包含的节点数量, 当小于UINT16_MAX时,是真正的大小,若超过这个值, 则需要遍历整个压缩列表才能得出 |
entryX | 列表节点 | 不定 | 压缩列表包含的各个节点, 节点的长度由节点保存的内容决定 |
zlend | unit8_t | 1字节 |