Redis深度历险-紧凑列表

紧凑列表

Redis5.0又引入了新的数据结构listpack,是在压缩列表基础上的改进,整体有所类似,紧凑列表解决了一个很重要的问题:级联更新;Redis深度历险-压缩列表 - 简书 (jianshu.com)

级联更新

级联更新.png

在紧凑列表中的prevlen有1字节长和5字节长两种情况,在尝试插入红色元素时有两种情况:

  1. 红色节点元素小于254字节,只需要更新黄色节点的prevlen即可
  2. 红色节点元素大于254字节,黄色节点需要扩容prevlen字段并更新数据

在上述第2种情况发生时,也有两种情况:

  1. 黄色元素扩容后依旧小于254字节,只需要更新绿色节点的prevlen即可
  2. 黄色元素扩容后大于254字节,绿色元素则也需要扩容prevlen

如果有多个接近于254字节的元素,就会造成级联更新了

紧凑列表的内存排布

紧凑列表.png
  • total_bytes:总长度
  • size:元素个数
  • entry:元素
    • encoding:编码方式,同样支持很多种
    • content:内容
    • length:本元素长度

紧凑列表每个元素尾部存储了当前元素的长度,元素长度结合total_bytes就可以实现从后往前的遍历,不同元素的内容解耦开了,不再会发生级联更新的问题了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容