美文网首页程序员
Redis学习笔记(五) 压缩列表

Redis学习笔记(五) 压缩列表

作者: 子时已过 | 来源:发表于2020-05-13 23:16 被阅读0次

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

压缩列表是为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构。一个压缩列表可以包含任意多的节点,每个节点可以保存一个字节数组或一个整数值。

压缩表可以包含:

1、长度小于等于63字节的字节数组

2、长度小于16383字节的字节数组

3、长度小于等于4294967295字节的字节数组

4、4位长度的无符号整数

5、1字节长度有符号整数

6、3字节长的有符号整数

7、int16类型的整数

8、int32类型的整数

9、int64类型的整数

每个压缩列表节点都由previous_entry_length、encoding、content三部分组成

说明:previous_entry_length 保存前一节点的长度,如果前一个节点长度小于254节点,那么previous_entry_length属性需要1字节长的空间来保存这个长度值;如果超度254则需要5个字节长的空间来保存这个长度。

连锁更新

由于是连续的内存片段,当在中间插入一个元素时,

e1节点的 previous_entry_length属性仅长1字节,当将new节点设置为前置节点时,由于e1的previous_entry_length 长度为1无法保存new节点的长度,所以需要将长度扩展到5个字节空间,因此需要对列表进行空间重新分配操作。同理,如果引发了对e2、e3.。。。的扩展,这种操作称为连锁更新。

连锁更新在最坏的情况下需要对压缩列表执行n次空间的重分配操作,每次空间重分配的最坏复杂度为O(N),所以连锁更新最坏的的复杂度为O(N2)。

-------- end --------

每天学一点,总会有收获。

说明:尊重作者知识产权,文中内容参考《Redis设计与实现》,仅在此做学习与大家分享。

相关文章

  • Redis学习笔记(五) 压缩列表

    压缩列表是列表键与哈希键的底层实现之一。当一个列表键只包含少量的列表项,并且每个列表项要么就是小整数值,要么就是长...

  • redis笔记:压缩列表

    本人博客同步发表,排版更佳 概述 压缩列表是列表、哈希的底层实现之一 当列表只包含少量列表项,并且要么是小整数值、...

  • 7 压缩列表

    压缩列表(ziplist)是列表键和哈希键的底层实现之一。 7.1 压缩列表的构成 压缩列表是Redis为了节约内...

  • Redis数据结构与对象——压缩列表

    压缩列表(ziplist)是列表和哈希键的底层实现之一。 1 压缩列表的构成 压缩列表是Redis节约成本而开发,...

  • Redis内存压缩原理与实战

    在讨论Redis内存压缩的时候,我们需要了解一下几个Redis的相关知识。 压缩列表 ziplist Redis的...

  • Redis 压缩列表

    压缩列表是 列表键 和 哈希键 的底层实现之一:当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么...

  • 7.压缩列表

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

  • [redis 源码走读] 压缩列表(ziplist)

    压缩列表 点赞作者:redis 源码,注释很多而且很详细。看压缩列表源码前,可以先看看 ziplist.c 文件顶...

  • redis list底层数据结构

    redis list数据结构  redis list数据结构底层采用压缩列表ziplist或linkedlist两...

  • Redis(七):Redis底层数据类型

    1、ziplist 压缩列表 1.1 概述 压缩列表是Redis为了节约内存而开发,是一块连续的内存空间,元素之间...

网友评论

    本文标题:Redis学习笔记(五) 压缩列表

    本文链接:https://www.haomeiwen.com/subject/empanhtx.html