本文主要是介绍Redis 压缩列表ziplist 解读(续 级联连续更新),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 为什么会发生级联更新
entry中的prevlen字段表示前一个entry的长度,有两种取值,1byte或者5byte.
当一个entry前边的entry的长度发生变化时,会导致需要增大entry 的prevlen字段的size 来存储前一个entry的长度,如果有连续多个entry的容量接近254时,就会发生多个entry的prevlen的size需要扩容,这时就发生所谓的级联更新。
这种更新本质是prevlen size的变化,它以下有两种情形,
一种是扩大(1byte —> 5bytes),
一种是收缩(5bytes—>1byte)
ziplist中不处理收缩情形,因为可以使用5bytes冗余的表示1byte的情形
2. 级联更新发生在何种情形下
ziplist插入元素或者删除元素时都可能发生级联更新
3.级联更新示意图
-
A.插入元素不要更新的情形,prevlen 远小于254
红色entry插入到黄色entry前
由于红色entry的长度为101,黄色entry的prevlen由0变成101,用1byte编码足够,不会发生更新。
这篇关于Redis 压缩列表ziplist 解读(续 级联连续更新)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!