美文网首页
(4)List底层之quicklist

(4)List底层之quicklist

作者: hedgehog1112 | 来源:发表于2020-10-25 12:18 被阅读0次

    3.2之后,引入quicklist;3.2前,list底层是ziplist和linkedlist   

    1)linkedlist双端链表:

        1.两端push和pop操作,内存开销大

        2.每个节点保存数据、两个指针

        3.各个节点是单独内存块,地址不连续,节点多了产生内存碎片

    2)压缩列表:

        1.存储效率,整块连续内存

        2.每次修改引发一次内存realloc(动态内存调整)

        3.长度很长时,一次realloc导致大量数据拷贝性能低

    3)quicklist:结合ziplist和linkedlist优点;空间和时间效率折中

    带来新问题:包含多长ziplist合适?如同存12个数据项,可是一个quicklist含3个节点,每ziplist含4个数据项,也可quicklist包含6个节点,每个节点ziplist又包2个数据项。找平衡点难题。只从存储效率分析:

    (1)ziplist越短,内存碎片越多。降低存储效率。只包含一个,蜕化成双向链表了。

    (2)ziplist越长,分配大块内存空间越难。降低存储效率。quicklist只有一个节点,蜕化成一个ziplist了。

    ps:ziplist长度<1024个元素,元素<64字节 兼顾低内存和高性能

    一、quicklist结构定义:

    1、fill :单个节点(quicklistNode)负载比例(fill factor),ziplist最大长度

    ziplist中entry数量,由list-max-ziplist-size配置项控制;-2 、 -1 性能最好           

        -5: 最大存储空间: 64 Kb <-- 通常情况下不要设置这个值

        -4: 最大存储空间: 32 Kb <-- 非常不推荐

        -3: 最大存储空间: 16 Kb <-- 不推荐

        -2: 最大存储空间: 8 Kb <-- 推荐

        -1: 最大存储空间: 4 Kb <-- 推荐

    对于正整数则表示最多能存储到你设置的那个值, 当前的节点就装满了通常在

    2、compress ://压缩深度,由list-compress-depth配置项控制

                    表示 quicklist 中的节点 quicklistNode, 两端 compress 个节点之后, 中间节点都被压缩(LZF压缩算法)。

    二、quicklistNode结构定义:

    三、quicklistLZF结构定义

    四、quicklist的结构

    https://mp.weixin.qq.com/s/kkl1wnhyH37pUyvRbbp5Bw、

    http://zhangtielei.com/posts/blog-redis-quicklist.html

    相关文章

      网友评论

          本文标题:(4)List底层之quicklist

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