redis集群通过16384个哈希槽实现数据分片,初始由redis-cli --cluster create自动均分连续区间,支持cluster addslots手动精确分配,动态扩缩容时可用reshard交互迁移或rebalance自动均衡,允许按硬件性能、业务隔离或跨机房需求非均匀分配。

Redis 集群把 16384 个哈希槽(slot)分配给各个节点,核心目标是让数据分布尽量均衡、迁移尽量轻量、扩缩容尽量平滑。分配不是随机的,而是基于明确规则和可操作机制完成的。
初始分配:自动均分 + 连续区间
用 redis-cli --cluster create 创建集群时,工具会自动把 0–16383 这 16384 个槽连续、大致均等地切分成若干段,每段分配给一个主节点。例如:
- 3 个主节点 → 每个约得 5461 个槽:节点 A(0–5460)、B(5461–10922)、C(10923–16383)
- 6 个主节点 → 每个约得 2730 或 2731 个槽,余数逐一分配,保证总和为 16384
这种连续区间划分便于管理,也利于客户端快速查表定位(每个节点只需存一段起止范围)。
手动分配:用 CLUSTER ADDSLOTS 精确控制
集群创建后,可用 CLUSTER ADDSLOTS 命令为某个节点显式指派一组槽位。比如:
-
CLUSTER ADDSLOTS 1000 1001 1002:给当前节点加 3 个指定槽 -
CLUSTER ADDSLOTS 5000 5001 ... 5999(批量):需一次性提交全部数字,不能写范围
注意:所有 16384 个槽必须被且仅被一个主节点负责,否则集群启动失败或拒绝服务。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
动态再分配:reshard 和 rebalance
节点增减或负载不均时,需迁移槽位。Redis 提供两种方式:
- reshard:交互式手动迁移。你指定迁移数量、目标节点、源节点(可选 all 或单个 ID),系统逐个移动槽及其数据,并触发 ASK/MOVED 重定向保障一致性
-
rebalance:自动均衡。运行
redis-cli --cluster rebalance,它会计算各节点槽数差值,自动从多的节点往少的节点搬槽,支持阈值控制(如--cluster-threshold 2)
两者都不阻塞服务,但需关注源节点 CPU/带宽、目标节点内存是否充足。
特殊场景下的非均匀分配
实际部署中,未必严格均分。以下情况允许且推荐倾斜分配:
- 节点硬件性能差异大:给高配机器分配更多槽(如 8000 个),低配机器少分(如 3000 个)
- 多租户隔离:按业务划分槽段,如业务 A 用 0–7999,业务 B 用 8000–16383,配合代理层路由
- 跨机房部署:手动指定某机房内节点只承担本地槽,减少跨中心流量
只要每个槽有唯一归属,集群就能正常工作;均匀只是默认策略,不是强制约束。










