Redis数据结构-压缩列表
压缩列表
当一个列表键只包含少量列表项,并且每个列表项要么就是小整数,要么就是长度比较短的字符串,那么Redis就会使用压缩列表来做列表键的底层实现。
另外,当一个哈希键只包含少量键值对,比且每个键值对的键和值要么就是小整数值,要么就是长度比较短的字符串,那么Reids就会使用压缩列表来做哈希键的底层实现。
压缩列表的构成
压缩列表是Redis为了节约内存而开发的,是由一系列特殊的编码的连续内存块组成的顺序型数据结构。一个压缩列表可以包含任意多个戒掉,每个节点可以保存一个字节数组或者一个整数值。
压缩列表的各个组成部分
压缩列表节点的构成
每个压缩列表节点都由previous_entry_length、encoding、content三个部分组成
previous_entry_length
节点的previous_entry_length属性以字节位单位,记录了压缩列表中前一个节点的长度。previous_entry_length属性的长度可以是字节或者5字节。
- 如果前一个节点的长度小于254字节,那么previous_entry_length属性的长度位1字节:前一个节点的长度就保存在这一个字节里面。
- 如果前一个节点的而长度大于等于254节点,那么previous_entry_length属性的长度为5字节:其中属性的第一字节会被设置位0xFE(十进制254),而之后的4个字节则用于保存前一个节点的长度
encoding
节点的encoding属性记录了节点的content属性所保存数据的类型以及长度。
- 1字节、2字节或者5字节,值的最高位为00、01或者11的是字节数组编码:这种编码表示节点的encoding属性保存着字节数组,数组的长度由编码除去最高两位之后的其他位记录
- 一字节长,值的最高位以11开头的是整数编码:这种编码表示节点的content属性保存着整数值,整数值的类型和长度由编码除去最高两位之后的其他位记录
content
节点的content属性负责保存节点的值,节点的值可以是一个字节数组或整数,值的类型和长度由节点的encoding属性决定
连锁更新
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ansore!






