紧凑列表
在
Redis5.0
又引入了新的数据结构listpack
,是在压缩列表基础上的改进,整体有所类似,紧凑列表解决了一个很重要的问题:级联更新;Redis深度历险-压缩列表 - 简书 (jianshu.com)
级联更新
级联更新.png在紧凑列表中的prevlen
有1字节长和5字节长两种情况,在尝试插入红色元素时有两种情况:
- 红色节点元素小于254字节,只需要更新黄色节点的
prevlen
即可 - 红色节点元素大于254字节,黄色节点需要扩容
prevlen
字段并更新数据
在上述第2种情况发生时,也有两种情况:
- 黄色元素扩容后依旧小于254字节,只需要更新绿色节点的
prevlen
即可 - 黄色元素扩容后大于254字节,绿色元素则也需要扩容
prevlen
了
如果有多个接近于254字节的元素,就会造成级联更新了
紧凑列表的内存排布
紧凑列表.png-
total_bytes
:总长度 -
size
:元素个数 -
entry
:元素-
encoding
:编码方式,同样支持很多种 -
content
:内容 -
length
:本元素长度
-
紧凑列表每个元素尾部存储了当前元素的长度,元素长度结合total_bytes
就可以实现从后往前的遍历,不同元素的内容解耦开了,不再会发生级联更新的问题了
网友评论