redis底层数据结构 quickList

本文介绍了Redis的QuickList数据结构,它通过限制ZipList的大小和节点数量,以及压缩中间节点,有效解决了内存连续性问题和大数据存储效率。重点讨论了list-max-ziplist-size和list-compress-depth配置选项。
摘要由CSDN通过智能技术生成

quickList

ZipList虽然节省内存,但是申请内存空间必须是连续的,如果内存占用较多,申请效率低怎么办?

  • 为了缓解这个问题,我们必须限制ZipList的长度和Entry大小

但是我们要存储大量数据,超出了ZipList的大小怎么办?

  • 我们可以创建多个ZipList来分片存储数据

数据拆分后比较分散,不方便管理和查找,那这多个ZipList如何建立联系?

redis3.2之后引入了新的数据结构quickList,他是一个双端链表,只不过链表中的每一个节点都是一个ZipList
在这里插入图片描述
为了避免QuickList中每个ZipList的entry过多,redis提供了一个配置项:list-max-ziplist-size来限制

  • 如果值为正值,则代表ZipList的允许的entry的个数的最大值
  • 如果值为负值,则代表ZipList的最大内存大小,分5种情况:
    1. -1:每个ZipList的内存占用不能超过4kb
    2. -2:每个ZipList的内存占用不能超过8kb
    3. -3:每个ZipList的内存占用不能超过16kb
    4. -4:每个ZipList的内存占用不能超过32kb
    5. -5:每个ZipList的内存占用不能超过64kb
      其默认值为-2

除了控制ZipList的大小,quickList还可以对节点的ZipList做压缩,通过配置项list-compress-depth来控制。因为链表一般都是从首尾访问比较多,所以首尾是不压缩的。这个参数是控制首位不压缩的节点个数:

  • 0:特殊值,代表不压缩
  • 1:表示QuickList首尾各有1个节点不压缩,中间节点压缩
  • 2:表示QuickList首尾各有2个节点不压缩,中间节点压缩
  • 以此类推
    默认值是0

在这里插入图片描述
在这里插入图片描述

总结

QuickList特点:

  • 是一个节点为ZipList的双端链表
  • 节点采用ZipList,解决了传统链内存占用问题
  • 控制了ZipList的大小,解决了ZipList连续内存申请效率问题
  • 中间节点可以压缩,进一步节省了内存
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值