Ziplist 是Redis中对于少量列表项的实现用于hash和list的实现,是由连续的内存块组成的数据结构,主要是为了节约内存,没有一个struct:
其中每个节点的entry的值为:
其中previous_entry_length用于保存前一个节点的长度,当前一个结点长度在254之内,则该属性只有一个字节,否则该属性由5个字节组成,其中第一个字节为0XFE。这个属性当然是为了从后向前对列表进行遍历了。
连锁更新
什么是连锁更新呢?就是列表突然插入一个长度大于254的元素(或者突然删除一个小元素)导致的节点长度的连锁更新,这样会导致O(N^2)的时间复杂度,也就是最坏情况下的时间复杂度。