redis压缩列表

压缩列表是列表和字典的底层实现

压缩列表结构

在这里插入图片描述

压缩列表字段说明

属性类型用途
zlbytesuint32_t整个压缩列表所占字节数
zltailuint32_t记录最后节点距离压缩列表起始位置的字节数
zllenuint16_t压缩列表中的元素个数
entryX不定存储的元素
zlenduint8_t特殊值(0xFF)
压缩列表节点结构

在这里插入图片描述
previous_engtry_length : 存储上一个元素的长度,有两个长度
1个字节,如果上一个entry的长度小于254字节,previous_entry_length 为一个字节
5个字节,如果上一个entry的长度大于等于254字节,previous_entry_length为5个字节,第一个字节为0XFE,后四个字节存储上一个entry的长度

encoding : 数据的编码格式

编码编码长度content保存的值
00******1个字节长度小于等于63个字节的字节数组
01******2个字节长度小于2^14-1个字节的字节数组
10******5个字节长度小于2^36-1个字节长度字节数组
11000000一个字节一个int16_t整数
11010000一个字节一个int32_t整数
11100000一个字节一个int64_t整数
11110000一个字节24位有符号整数
1111****一个字节使用这一编码的节点没有content属性,数据直接存储在encoding中

总结

  • 压缩列表中存储总长度,尾节点位置以及存储的节点个数
  • 通过记录的尾节点位置可以快速定位尾节点位置,然后通过previous_entry_length可以反向遍历压缩列表
  • 在entry中通过encoding编码来定义数据宽度,节省内存
    需要注意的是如果连续几个节点的长度位250~254之间,如果新增一个节点长度大于254在这几个节点之前,因为之前的节点存不下这个长度,会导致连锁更新
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值