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

整体结构

相关推荐
Gauss松鼠会3 分钟前
【GaussDB】破除gaussdb ugin索引支持中文模糊查询的迷思-字符序
java·运维·服务器·网络·数据库·gaussdb·经验总结
l1t27 分钟前
DeepSeek总结的PostgreSQL因选择而宽松,因偶然而永久
数据库·postgresql
Nturmoils33 分钟前
数据同步中断后,KFS 怎么把链路接回来
数据库
leisoo80971 小时前
股票筹码分布怎么用获利比例成本区间与集中度实战 IG50免费开源股票数据API接口
开发语言·jvm·数据库·python·开源
字节跳动的猫1 小时前
LikeShop 商品评价体系二开:追评、晒图审核与评价标签筛选功能开发
运维·数据结构·数据库
范中勤2 小时前
LLM 动态加载与多用户缓存架构技术文档
redis·langchain·llm·缓存架构·多用户隔离
行业研究员2 小时前
Agent Memory降低Token消耗原理解析
数据库·人工智能·oracle·腾讯云·智能体
yixun_gdas2 小时前
企业网站内容巡查的价值与方法:企业官网的合规与形象管理
数据库·内容运营
见闻小天地2 小时前
空调机房赛莱默B&G冷冻泵/冷却泵的核心技术特性分析
大数据·运维·数据库
辛迪聊物业数字化2 小时前
物业管理系统新手部署与实操指南
数据库·物联网·架构·系统架构