多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
上面提到`entry`中的`prevlen`属性可能是`1`个字节也可能是`5`个字节,那么我们来设想这么一种场景: 假设一个`ziplist`中,连续多个`entry`的长度都是一个接近但是又不到`254`的值(介于`250~253`之间),那么这时候`ziplist`中每个节点都只用了`1`个字节来存储上一个节点的长度,假如这时候添加了一个新节点,如`entry1`,其长度大于`254`个字节,此时`entry1`的下一个节点`entry2`的`prelen`属性就必须要由`1`个字节变为`5`个字节,也就是需要执行空间重分配,而此时`entry2`因为增加了`4`个字节,导致长度又大于`254`个字节了,那么它的下一个节点`entry3`的`prelen`属性也会被改变为`5`个字节。依此类推,这种产生连续多次空间重分配的现象就称之为**连锁更新**。同样的,不仅仅是新增节点,执行删除节点操作同样可能会发生连锁更新现象。 虽然`ziplist`可能会出现这种连锁更新的场景,但是一般如果只是发生在少数几个节点之间,那么并不会严重影响性能,而且这种场景发生的概率也比较低,所以实际使用时不用过于担心。