ziplist 是一个经过特殊编码的双向链表,旨在提高内存效率。
它可以存储 字符串 或者 整数,存储整数时是采用整数的二进制而不是字符串形式存储。
他能在O(1)的时间复杂度下完成list两端的push和pop操作。
由于每个操作都需要重新分配 ziplist 使用的内存,因此实际复杂性与 ziplist 使用的内存量有关。

记录 ziplist 整个结构体的占用空间大小,占4个字节 32 位无符号整型。这个结构有个很大的用处,就是当需要修改 ziplist 时候不需要遍历即可知道其本身的大小。
记录整个压缩列表(ziplist)最后一个entry(数据)的偏移量,占4个字节,32位的无符号整形。所以尾部进行pop操作的时候不需要先遍历一次。
记录整个压缩列表的 entry 数量,占用2个字节,16位无符号整形,最多元素数目:(2^16)-1。备注:如果超过了,则zllen字段无法获取压缩列表元素的数目,此时需要通过遍历整个压缩列表才能获取到元素数目
存储压缩列表(ziplist)元素的地方,可以是字节数或者整数。它下面又包含如下属性:
00 、 01 、 10 和 1100 、 01 和 10 表示 content 部分保存着字符数组11 表示 content 部分保存着整数压缩列表(ziplist)的结尾,占一个字节,8位无符号整形。固定为:0xFF(255),为ziplist的结束标识