Redis压缩列表

Redis压缩列表

压缩列表是一种为节约内存而开发的顺序型数据结构。

是列表键和哈希键的底层实现之一。(包含少量列表项,列表项是小整数值或长度较短的字符串)(只包含少量键值对,值是小整数值或长度较短的字符)

是由一系列特殊编码的连续内存块组成的顺序结构.

zlbytes:记录整个压缩列表占用的内存字节数

zltail:表尾结点距离压缩列表起始位置多少字节(如果需要访问表尾结点,无需遍历整个压缩列表就可以得到表尾地址)

zllen:压缩列表中结点的数量

entryx:结点

zlend:用于标记压缩列表的尾端

结点构成:

previous_entry_length:

​ 以字节为单位,记录前一个结点的长度

​ 如果前一个结点长度小于254字节那么previous_entry_length=1字节,在这一个字节记录前一个结点的长度

​ 如果前一个结点长度大于254字节那么previous_entry_length=5字节,将此属性第一个字节设置为0xFE(十进制254),之后四个字节保存前一个结点的长度。

因为结点的previous_entry_length属性记录了前一个结点的长度,所以程序可以通过指针运算,根据当前节点的起始地址来计算出前一个结点的起始地址

压缩列表从表向表头遍历就是此原理

encoding:记录保存的数据类型以及长度

content:保存结点值,结点值可以是一个字节数组或者整数

连锁更新

eg:一个压缩列表中,有多个连续长度介于250~253字节的结点e1…eN这时,将一个长度大于254字节的的new设置为头结点,那么头结点之后所有结点的previous_entry_length都要进行空间重分配,由1字节转换为5字节,导致连锁反应。

删除结点也可能会导致连锁更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值