Redis 集群模式如何实现渐进式扩容?
📌 Redis 集群模式如何实现渐进式扩容?
1️⃣ 问题背景
随着业务规模增长,Redis 单机或者固定规模的 Redis Cluster 往往会面临存储容量不足、CPU 压力增大以及网络带宽瓶颈等问题。
例如一个电商系统最初部署了 3 主 3 从集群,能够支撑 5000 万用户数据。当业务增长到数亿级用户后,单个节点的内存逐渐接近上限,此时就需要扩容。
如果采用传统数据库的扩容方式,通常需要停机迁移数据,而 Redis Cluster 设计之初就考虑到了在线扩容问题,因此支持渐进式扩容(Online Resharding)。
Redis 集群最大的特点是:
2️⃣ 核心原理
Redis Cluster 并不是简单地按照 Key 进行分片,而是引入了 Hash Slot 的概念。
整个 Redis Cluster 固定划分为:
所有 Key 通过 CRC16 算法计算后映射到 16384 个槽位中的某一个。
计算公式:
例如:
- 用户A → Slot 5000
- 用户B → Slot 12000
- 订单A → Slot 3000
Redis 集群扩容时,并不是迁移整个节点的数据,而是迁移部分 Slot。
因此:
3️⃣ 数据结构分析
Redis Cluster 的核心数据结构是 Slot 映射表。
| 节点 | 负责槽位 |
|---|---|
| Master1 | 0 ~ 5460 |
| Master2 | 5461 ~ 10922 |
| Master3 | 10923 ~ 16383 |
扩容前:
新增 Master4 后:
本质就是重新分配 Slot。
4️⃣ 算法分析
Redis 集群扩容采用 Slot 迁移算法。
迁移步骤如下:
- 新增 Redis 节点
- 节点加入 Cluster
- 重新计算 Slot 分布
- 迁移部分 Slot
- 同步迁移对应 Key
- 更新 Slot 路由表
假设新增一个节点:
Redis 会将部分 Slot 从旧节点迁移到新节点。
迁移过程中采用:
- MIGRATING 状态
- IMPORTING 状态
- ASK 重定向机制
保证业务不中断。
5️⃣ 执行流程
扩容流程图
↓
cluster meet 加入集群
↓
分配 Slot
↓
源节点进入 MIGRATING 状态
↓
目标节点进入 IMPORTING 状态
↓
迁移 Key 数据
↓
更新 Slot 所属关系
↓
迁移完成
整个过程业务仍然正常运行。
客户端访问过程中如果访问到迁移中的 Slot:
客户端收到 ASK 指令后会自动重定向到新的节点。
6️⃣ 实际案例
假设电商系统部署:
| 节点 | 内存 | 使用率 |
|---|---|---|
| Master1 | 32G | 90% |
| Master2 | 32G | 88% |
| Master3 | 32G | 92% |
此时新增一台 32G Redis:
加入集群后执行:
迁移约 4096 个 Slot 到新节点。
最终四个节点平均承担数据压力。
7️⃣ 优缺点分析
✅ 优点
- 无需停机
- 支持在线扩容
- 数据迁移粒度小
- 业务无感知
- 支持水平扩展
- 容量近乎无限增长
❌ 缺点
- 迁移期间存在网络开销
- 大量 Slot 迁移耗时较长
- 迁移过程中性能略有下降
- 客户端必须支持 ASK/MOVED 重定向
8️⃣ 面试常见问题
Redis Cluster 为什么能在线扩容?
因为 Redis 将数据划分为 16384 个 Slot,扩容时迁移 Slot 即可,不需要整体迁移节点数据。
Redis 扩容迁移的是数据还是 Slot?
本质迁移的是 Slot,Slot 对应的数据会跟随迁移。
迁移期间客户端访问怎么办?
Redis 通过 ASK 重定向机制自动引导客户端访问新的节点。
为什么是 16384 个槽位?
16384 = 214,在内存占用和寻址效率之间取得平衡,同时能够通过 Bitmap 高效表示 Slot 分布。
扩容时会影响业务吗?
理论上不会中断业务,但迁移期间会消耗部分网络和 CPU 资源,因此通常选择业务低峰期进行扩容。
Redis Cluster 为什么不用一致性 Hash?
一致性 Hash 在节点变更时需要重新计算大量映射关系,而 Slot 模型只需要迁移部分 Slot,管理更加简单。
9️⃣ 总结
Redis Cluster 渐进式扩容的核心思想是:固定 16384 个 Hash Slot,通过 Slot 迁移实现在线扩容。
扩容流程:
新增节点 → 加入集群 → 重新分配 Slot → 迁移 Key → 更新路由 → 扩容完成。
本质上迁移的不是整个节点的数据,而是 Slot 所有权。
正因为有了 Hash Slot、MIGRATING、IMPORTING、ASK/MOVED 重定向机制,Redis Cluster 才能够做到不停机扩容和渐进式数据迁移,这是 Redis 支撑亿级数据规模的重要基础能力之一。
相关文章
-
分库分表怎么分页?维护一个全局主键表可行吗?
分库分表后,传统的 MySQL 分页方式会失效,因为数据已经分散到多个库和多个表中。实际项目中通常采用:
NEW个对象 2026-06-13
-
微信登录和基于授权码模式的单点登录,四个角色分别是什么?
微信登录和基于授权码模式的单点登录,四个角色分别是什么?
NEW个对象 2026-06-13
-
Kafka消息堆积如何处理?
Kafka消息堆积如何处理?
NEW个对象 2026-06-13