- zlbytes:占4个字节,记录整个压缩列表占用的内存字节数。
- zltail_offset:占4个字节,记录压缩列表尾节点entryN距离压缩列表的起始地址的字节数。
- zllength:占2个字节,记录了压缩列表的节点数量。
- entry[1-N]:长度不定,保存数据。
- zlend:占1个字节,保存一个常数255(0xFF),标记压缩列表的末端。
假设这是一个压缩列表的头两个节点,因此:
- 第一个节点信息:
- prev_entry_len成员为0,占1字节空间,因为前驱节点长度为0,小于254。
- encoding成员为0000 0101,最高两位为00,因此encoding占1个字节且可以算出value为字符数组,根据剩下的6位00 0101,可以算出value长度为5字节。
- value成员根据encoding成员算出长度为5字节,因此,会读5个字节的字节数组,值为”Redis”。
- 第二个节点信息:
- prev_entry_len成员为0x07,占一个字节,因为前驱节点长度为7,小于254。
- encoding成员编码为1101 0000,最高两位为11,因此encoding占1个字节且可以算出value为整数,在根据encoding编码可以得出value值为占32位,4个字节int32_t类型的有符号整数。
- value成员根据encoding编码,读出4个字节的整数,值为 1234。
- 压缩列表的表头信息:
- zlbytes为整个压缩列表所占字节数24。
- zltail_offset为从压缩列表的首地址到最后一个entry节点的偏移量17。
- zlength为节点个数2。
- zlend为常数255(0xFF)。