redis-原理篇-QuickList

引子

Q1:ZipList虽然节省内存,但申请内存必须是连续空间,如果内存占用较多,申请内存效率很低

A1:限制ZipList的长度和entry大小

Q2:存储大量数据,超出了ZipList最佳的上限

A2:创建多个ZipList来分片存储数据

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

A3:Redis引入了新的数据结构QuickList,它是一个双端链表,只不过链表中的每个节点都是一个ZipList

QuickList

为了避免QuickList中的每个ZipList中entry过多,Redis提供了一个配置项:list-max-ziplist-size来限制。

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

其默认值为 -2

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

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

默认值为 0

整体结构

相关推荐
码出钞能力17 分钟前
apache-shardingsphere-5.5.3自定义分片算法
数据库
兜有米啦1 小时前
数据库第二次作业
数据库
nVisual1 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理
weixin_6681 小时前
Cursor-superpowers插件用法
数据库·人工智能
流星白龙1 小时前
【Redis】8.List列表
redis
NWU_白杨2 小时前
三种常用的数据存储技术
数据库·redis·mysql·sqlite
我叫黑大帅2 小时前
我为什么单一消费者的场景下,要用 Redis List 当消息队列?
redis·后端·面试
吃饱了得干活2 小时前
亿级订单表分库分表设计,从0到1全流程
java·数据库·面试
蓝创工坊Blue Foundry2 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
麦聪聊数据2 小时前
企业数据市场建设(三):API 化服务封装,让数据开箱即用、避免重复开发
数据库