美文网首页
redis(6)压缩列表

redis(6)压缩列表

作者: 大飞飞_s8 | 来源:发表于2019-09-26 19:40 被阅读0次

1、压缩列表(ziplist) 是列表键和hash键的底层实现之一,当列表建存储小的整数值,或者长度较短的字符串redis就会使用压缩列表,当一个hash键值对,键和值要么是小整数值要么是长度较短的字符串,那么redis就会使用压缩列表来底层实现

2、压缩列表底层构成

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

2.2、zblbytes unit_32_t 4字节,记录整个压缩列表占用内存字节数:在对压缩列表进行内存重分配,或者计算zlend的位置时使用

zltail unit_32_t 4字节 记录压缩列表表尾节点距离压缩列表起始地址有多少字节:通过这个偏移量,程序无须遍历整个压缩列表就能确定压缩列表 尾节点的地址

zllen int_16 2字节 记录压缩列表节点数量,当数值=65535时,依然要遍历列表才能计算出来

entryX 列表节点 节点的长度由节点保存的内容决定

zlend int_8 1字节 特殊值0xFF 十进制255,用于标记压缩列表末端

3、压缩列表节点的构成

3.1、每个压缩列表节点可以保存一个字节数组或者一个整数值,字节数组以下三种长度的一种

长度小于等于63(2的6次方-1)字节的字节数组

长度小于等于16383(2的14次方-1)字节的字节数组

长度小于等于4294967295(2的32次方-1)字节的字节数组

整数值以下六中长度

4位长,0-12之间无符号整数

1字节 3字节 int_16 int_32 int_64

每个压缩列表由previous_entry_length encoding content三部分组成

3.2、previous_entry_length属性以字节为单位,记录前一个节点长度,比如前一个节点长度254,则属性值字节长度1字节,大于254,则为5字节其中属性第一个字节为254,之后四字节用于保存前一个节点的长度,可以更加方便计算前一个节点的起始位置

3.3、encoding 记录节点的content属性所保存数据类型和长度

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

4、连锁更新,由于字节数变更,导致连续多次空间扩展操作称为连续更新,添加或者删除节点都可能引发连锁更新,连锁更新最坏情况下,需要n次空间重分配操作,每次空间分配最坏复杂度o(N)所以连锁更新最坏复杂度o(n)

几率很低

发生条件,多个连续的,长度结余250和253字节之间的节点,其次,即使出现连锁更新,但是更新的节点数量不多,不会造成任何性能影响

相关文章

  • redis(6)压缩列表

    1、压缩列表(ziplist) 是列表键和hash键的底层实现之一,当列表建存储小的整数值,或者长度较短的字符串r...

  • 7 压缩列表

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

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

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

  • Redis内存压缩原理与实战

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

  • Redis 压缩列表

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

  • 7.压缩列表

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

  • 针对Redis数据库的造轮子计划(数据结构 - 1)

    Redis 数据库底层有‘简单动态字符串’、‘链表’、‘字典’、‘跳跃表’、‘整数集合’和‘压缩列表’这 6 种数...

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

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

  • redis list底层数据结构

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

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

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

网友评论

      本文标题:redis(6)压缩列表

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