🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
`ziplist`的组成结构为: ~~~properties <zlbytes> <zltail> <zllen> <entry> <entry> ... <entry> <zlend> ~~~ 其中: * `zlbytes`、`zltail`、`zllen`为`ziplist`的`head`部分; * `entry`为`ziplist`的`entries`部分,每一个`entry`代表一个数据; * 最后`zlend`表示`ziplist`的`end`部分。 如下图所示: ![](https://img.kancloud.cn/b4/dc/b4dcfef5e91b0ab4e4048fb9a27cffbd_508x154.png) `ziplist`中每个属性代表的含义如下表格所示: | 属性 | 类型 | 长 度 | 说明 | | --- | :-- | --- | --- | | zlbytes | uint32\_t | 4字节 | 记录压缩列表占用内存字节数(包括本身所占用的`4`个字节)。 | | zltail | uint32\_t | 4字节 | 记录压缩列表尾节点距离压缩列表的起始地址有多少个字节(通过这个值可以计算出尾节点的地址) | | zllen | uint16\_t | 2字节 | 记录压缩列表中包含的节点数量,当列表值超过可以存储的最大值(`65535`)时,此值固定存储`65535`(即`2`的`16`次方 减`1`),因此此时需要遍历整个压缩列表才能计算出真实节点数。 | | entry | 节点 | \- | 压缩列表中的各个节点,长度由存储的实际数据决定。 | | zlend | uint8\_t | 1字节 | 特殊字符`0xFF`(即十进制`255`),用来标记压缩列表的末端(其它正常的节点没有被标记为 255 的,因为 255 用来标识末尾,后面可以看到,正常节点都是标记为 254)。 |