• zlbytes:占4个字节,记录整个压缩列表占用的内存字节数。
  • zltail_offset:占4个字节,记录压缩列表尾节点entryN距离压缩列表的起始地址的字节数。
  • zllength:占2个字节,记录了压缩列表的节点数量。
  • entry[1-N]:长度不定,保存数据。
  • zlend:占1个字节,保存一个常数255(0xFF),标记压缩列表的末端。

数据结构与对象----------06压缩列表

假设这是一个压缩列表的头两个节点,因此:

  • 第一个节点信息: 
    • 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)。

相关文章:

  • 2021-05-14
  • 2021-08-22
  • 2021-08-28
  • 2021-11-06
  • 2021-12-29
  • 2021-11-09
  • 2021-08-01
猜你喜欢
  • 2021-09-28
  • 2021-12-04
  • 2021-09-01
  • 2021-05-01
  • 2022-12-23
  • 2021-09-03
  • 2021-12-13
相关资源
相似解决方案