当前位置: 首页 > news >正文

Redis--基础知识点--32--redis底层存储结构

Redis 数据库底层实现中,那个存储所有键值对的全局哈希表(dict),在运行过程中是会动态扩缩容的。


1. Redis 哈希表的结构特点

Redis 的数据库(如db->dict)底层使用的是dict 字典结构,它内部维护两个哈希表(ht[0] 和 ht[1]):

  • 平时只用 ht[0]。
  • 当需要扩容或缩容时,会分配一个 ht[1](大小是当前容量的 2 倍或 1/2 左右),然后渐进式地将 ht[0] 中的数据迁移到 ht[1],迁移完成后 ht[1] 成为新的 ht[0],旧的释放。

2. 触发扩容的条件

Redis 会检查负载因子

负载因子 = 哈希表中已有节点数 / 哈希桶的数量(size)
  • 自动扩容:当负载因子 ≥ 1,且 Redis 没有在执行bgsave/bgrewriteaof(即没有在后台持久化)时,就会触发扩容;如果正在持久化,负载因子需要达到5才扩容。
  • 扩容规则:新的哈希表大小为当前键值对数量 × 2并取最近的 2 的幂。比如当前有 3 个键,容量为 4,扩容后容量为 8。

3. 触发缩容的条件

当键值对被删除,哈希表变得很空时,Redis 也会自动缩容,以节约内存。

  • 自动缩容:当负载因子 < 0.1时,会触发缩容。
  • 缩容规则:新的哈希表大小就是当前键值对的数量,然后按 2 的幂取整(但不会小于 4,除非空表)。例如当前 2 个键,容量原来是 16,缩容后容量为 4。

4. 渐进式 rehash(不阻塞服务)

无论是扩容还是缩容,都不是一次性把所有键重新哈希,因为这样会导致 Redis 阻塞几秒甚至更久。

Redis 采用了渐进式 rehash

  • 在 rehash 期间,每次对哈希表的增删改查操作,都会顺便把当前操作对应的桶从 ht[0] 迁移到 ht[1]。
  • 此外,Redis 还会在空闲时间(serverCron 定时任务)主动迁移一批桶。
  • 这样整个迁移过程被分摊到多次请求中,每个请求只增加微小开销,客户端无感知

5. 手动控制(可选)

你也可以通过命令强制触发或调整 rehash 行为:

  • 手动触发 rehash:CONFIG SET activerehashing yes(默认开启)
  • 临时禁止 rehash:CONFIG SET activerehashing no(不推荐)
  • 查看当前的 rehash 进度:INFO stats中的total_active_defrag等字段,但 rehash 的具体状态需要看DEBUG OBJECTMEMORY STATS

⚠️ 一个容易混淆的点

不要把这个全局字典的动态扩缩容Redis 集群(Cluster)的节点扩缩容搞混:

  • 全局字典:单个 Redis 实例内部的哈希表自动 resize,默认就开启
  • Cluster 节点:是集群层面的节点增删,需要手动执行 resharding。

你问的是前者,Redis 内部确实是会动态扩缩容的,且这是其内存管理的重要特性之一。


如果你还想了解 rehash 期间如何同时访问两个哈希表、或者如何观测当前字典的扩容/缩容状态,我可以继续展开说明。

http://www.jsqmd.com/news/906310/

相关文章:

  • 2026年专利向量数据库服务品牌综合实力排行:专利向量数据库服务/专利质押融资估值数据/企业专利数据库购买/全球商标数据集商用/选择指南 - 优质品牌商家
  • 破局2026:长沙白酒茶叶营销策划团队如何定义新消费时代的品牌增长 - 2026年企业资讯
  • 2026年西南欧松板厂家选型全维度技术判定指南:兴宏盛板材/四川板材厂家/实木颗粒板厂家/家居板材/家居环保板材/选择指南 - 优质品牌商家
  • CVPR 2019 GWCNet实战:用PyTorch复现组相关立体匹配网络(附KITTI数据集训练技巧)
  • LinkSwift:九大网盘直链下载助手终极指南,免费解锁高速下载新体验
  • 告别VMware!在Ubuntu 22.04上用virt-manager图形化安装macOS Monterey保姆级教程
  • 如何快速掌握macOS屏幕录制:简单高效的完整指南
  • Red Panda Dev-C++:现代化C++轻量级IDE的深度技术架构解析
  • 2026年成都锦城学院深度解析:高考志愿填报场景信息不对称与择校焦虑痛点 - 品牌推荐
  • 2026年锦城学院深度解析:民办高校招生困局与质量突围 - 品牌推荐
  • 2026年甘肃螺旋风管加工专业厂家实力排行:兰州中央空调安装工程、兰州中央空调工程公司、兰州中央空调工程安装、兰州中央空调改造工程选择指南 - 优质品牌商家
  • 为什么92%的DeepSeek容器化项目在CI/CD阶段失败?揭秘镜像分层优化、CUDA版本对齐与OOM Killer规避三大生死关卡
  • 2026年实测推荐:6款画时序图工具,效率翻倍!
  • 告别Steam客户端:WorkshopDL让你轻松下载1000+游戏模组的终极方案
  • DeepSeek租户级限流熔断机制失效真相:从令牌桶漂移、租户权重漂移到实时QPS归因分析
  • Veo 2 API密钥轮转机制失效全记录,企业级安全接入必须掌握的4个冷门配置项
  • 项目规划篇:基于 Streamlit 搭建极简交互式 AI 测试 Web 平台
  • 南京:一座被严重低估的古都,好吃程度远超你的想象
  • 北京五粮液回收技术分享:北京专业洋酒回收、北京专业红酒回收、北京名贵酒品回收回收、北京名酒回收、北京洋酒回收、北京礼盒酒水回收选择指南 - 优质品牌商家
  • 2026年锦城学院深度解析:应用型高校招生竞争中的品牌辨识度与生源质量瓶颈 - 品牌推荐
  • 2026 年 5 月证券从业突围:从业与就业 APP 实测避坑指南 - 讲清楚了
  • PostgreSQL Vacuum介绍(一种核心数据库维护操作,主要用于解决MVCC多版本并发控制机制带来的死元组dead tuples问题)回收死元组空间、存储空间耗尽、避免幻读、垃圾回收器
  • 3分钟实现百度网盘高速下载:告别限速的终极方案
  • 荣耀出征 5 月 30 日开服公告:荣耀 22 区 13:00 开启,官方下载 + 新手开荒全攻略
  • 2026年近期,潍坊企业如何甄选SMETA咨询服务?青岛明阳华信专业解析与推荐 - 2026年企业资讯
  • Qobuz-DL:一站式无损音乐下载解决方案
  • 如何5分钟快速配置《重返未来:1999》终极自动化助手M9A
  • 2026这6款神级降AI率平台全网首测,一键秒降AI率至安全区! - 降AI小能手
  • Sora 2短视频爆款率提升217%的关键——不是提示词,而是时间戳语义对齐技术(已验证于107条百万播放视频)
  • Aurix TC397内存不够用?三种方法教你手动指定变量到PSRR、DSRR等不同地址空间