压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么redis就会使用压缩列表来做列表键的底层实现。
压缩列表的构成
压缩列表是Redis为了节约内存而开发的,由一系列特殊编码的连续内存组成的顺序型数据结构。
zlbytes | zltail | zllen | entry1 | entry2 | … | entryN | zlend |
---|
zlbytes | zltail | zllen | entry1 |
---|---|---|---|
zlbytes | uint32_t | 4字节 | 记录整个压缩列表占用的内存字节数:在对压缩列表进行内存重分配,或者计算zlend的位置时使用 |
zltail | uint32_t | 4字节 | 记录压缩列表表尾节点距离压缩列表的起始地址有多少字节:通过这个偏移量,程序无须遍历整个压缩列表就可以确定表尾节点的地址。 |
zllen | uint16_t | 2字节 | 记录了压缩列表包含的节点数量:当这个属性的值小于uint16_MAX(65535)时,这个属性的值就是压缩列表包含节点的数量;当这个值等于65535时,节点的真实数量需要遍历整个压缩列表才能计算得出。 |
entryX |