redis底层数据结构 - ziplist压缩列表

1,ziplist压缩列表

1)redis为节约内存而开发的。由一系列特殊编码的连续内存块组成的有序数据结构。每个zlentry可以保存一个字节数组 或者 整数值。
ziplist通常用于实现zset键、哈希键,当ziplistInsert和ziplistDelete时,可能会触发连锁更新(cascade update),最坏情况需要n次空间重分配,每次空间重分配的复杂度最坏为n。
2)ziplist的底层表示

image.png

3)zlentry节点
image.png

4)存储示例。
redis中存储为小端法,低字节在低位地址。
zlbytes:0f -> 15 表示整个ziplist占用15个字节。
zltail:0c -> 12 表示尾节点距离起始位置12个字节。
zllen(entries) :02 -> 2表示节点数量为2个。
zlend : ff -> 255表示压缩列表结尾。
[00 f3] :00表示prev_entry_length为0,f3编码为|1111 0011|其中1111开头表示整数编码,xxxx,从0001~1101表示0-12之间的值。3 -1 表示 2
[02 f6] :02表示prev_entry_length为2,f6编码为|1111 0110| -> 6 -1 表示5.
image.png

5)hash key底层ziplist表示。
image.png

编码转化
哈希对象key-value长度均小于64字节且entry数量小于512个时,使用ziplist。
hash-max-ziplist-value:hash键key-value字节上限。
hash-max-ziplist-entries:hash键entry最大数量上限。
6)zset key底层ziplist表示。
image.png

编码转换
元素个数小于128且所有member长度小于64字节。
zset-max-ziplist-entries:ziplist编码时,默认元素个数上限为128个
zset-max-ziplist-values:ziplist编码时,默认member大小上限为64字节

你可能感兴趣的:(redis底层数据结构 - ziplist压缩列表)