Redis之压缩列表

Redis之压缩列表

        压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,Redis就会使用压缩列表来做列表键的底层实现。

        下面看一下压缩列表实现的列表键:

Redis之压缩列表

列表键里面包含的都是1、3、5、10086这样的小整数值,以及''hello''、''world''这样的短字符串。

再看一下压缩列表实现的哈希键:

Redis之压缩列表



压缩列表是Redis为了节约内存而开发的,是一系列特殊编码的连续内存块组成的顺序型数据结构。

一个压缩列表可以包含任意多个节点,每个节点可以保存一个字节数组或者一个整数值。

Redis之压缩列表


看一下压缩列表的示例:


Redis之压缩列表


看一下包含五个节点的压缩列表:

Redis之压缩列表


节点的encoding属性记录了节点的content属性所保存数据的类型以及长度。


节点的content属性负责保存节点的值,节点值可以是一个字节数组或者整数,值的类型和长度由节点的encoding属性决定。

Redis之压缩列表


连锁更新:

        每个节点的previous_entry_length属性都记录了前一个节点的长度,那么当前一个节点的长度从254以下变成254以上时,本节点的存储前一个节点的长度的previous_entry_length就需要从1字节变为5字节。

        那么后面的节点的previous_entry_length属性也有可能更新。不过连锁更新的几率并不大。


总结:

Redis之压缩列表