美文网首页
redis底层数据结构 - ziplist压缩列表

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

作者: 沐兮_d64c | 来源:发表于2019-06-17 00:33 被阅读0次

    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压缩列表

          本文链接:https://www.haomeiwen.com/subject/fisnfctx.html