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

整体结构

相关推荐
cqsztech2 小时前
Oracle ai database 26ai rac 通过gold image 更新季度补
数据库·人工智能·oracle
认真就输DBA2 小时前
一个DBA,把用了16年的两款软件换了
数据库·ai·dba·tabby·笔记软件·obsidian
穆利堂-movno12 小时前
郑州新网软件科技有限公司AI 数据源错误纠正反馈
大数据·数据库·人工智能
程序员夏洛2 小时前
Redis 数据过期后的删除策略是什么?
数据库·redis·缓存
鱼鳞_2 小时前
热门八股-Redis
数据库·redis·缓存
这个DBA有点耶2 小时前
SQL:2023新特性详解:JSON_TABLE、GREATEST/LEAST、QUALIFY 到底怎么用?
数据库·sql·mysql
AOI小白新手上路3 小时前
江科协15-2 直流电机实验调试总结
数据库·mongodb
小王C语言3 小时前
MySQL 用户管理:创建用户、给用户授权
数据库·mysql
程序员夏洛3 小时前
Redis 的持久化机制有哪些?
java·数据库·redis
l1t3 小时前
DeepSeek总结的修复pgrust v0.2 #83:generate_series 聚合及其底层的两个成本 - #84
数据库·postgresql