首页/数据/数据库速查/槽位管理(ADDSLOTS / DELSLOTS / SLOTS)
Redis 运维与场景124 条

槽位管理(ADDSLOTS / DELSLOTS / SLOTS)

手动指派槽:CLUSTER ADDSLOTS 把槽分给当前节点,DELSLOTS 取消;CLUSTER SLOTS 给客户端看槽-节点映射。建集群一般用 create 自动完成。

数据库速查数据更新于 2026-10-13

槽位是集群的分配单位

Redis Cluster 把整个键空间切成 16384 个槽,每个槽归属一个主节点,键通过 CRC16 计算后落在某个槽上。ADDSLOTS 与 DELSLOTS 用于手工调整槽的归属声明,CLUSTER SLOTS 则给客户端返回槽区间到节点的映射。日常建集群与扩容都应由 redis-cli 的集群子命令完成,手工改槽只用于修复特定场景。

基本信息

适用平台Redis 3.0+ 的 Cluster 模式
槽总数16384,必须全部被指派才算健康
分配命令CLUSTER ADDSLOTS、CLUSTER ADDSLOTSRANGE(7.0+)
查询命令CLUSTER SLOTS、CLUSTER SHARDS(7.0+)
迁移方式redis-cli --cluster reshard 或手工 MIGRATE

典型使用场景

  • 排查客户端报 CROSSSLOT 或 MOVED 重定向异常
  • 修复建集群时因中断导致的槽未完全分配
  • 扩容前查看各节点承担的槽区间分布
  • 确认某段槽的归属节点,辅助定位数据分布
  • 从集群手动摘除节点前收回其持有的槽

手工操作与查询

手工操作与查询
CLUSTER ADDSLOTS 0 1 2 3           # 把 0-3 号槽指派给当前节点
CLUSTER ADDSLOTSRANGE 100 200      # 7.0+ 区间指派
CLUSTER DELSLOTS 3                 # 取消槽 3 的归属声明
CLUSTER SLOTS                      # 客户端视角的槽到节点映射
CLUSTER SHARDS                     # 7.0+ 更易读的拓扑视图
CLUSTER INFO | grep -E 'cluster_state|slots_assigned|slots_ok'
redis-cli --cluster check 10.0.0.1:6379   # 一致性体检

命令速查

命令作用注意
ADDSLOTS指派槽给本节点仅在该槽未被分配时成功
ADDSLOTSRANGE按区间指派(7.0+)批量确认前先规划好区间
DELSLOTS取消槽归属声明数据不会自动迁移
CLUSTER SLOTS返回槽区间到节点映射客户端据此路由请求
CLUSTER SHARDS返回更可读的拓扑信息7.0+ 提供
--cluster reshard迁移槽与数据生产扩容的标准做法
ADDSLOTS 只是宣告归属,不会迁移数据:如果该槽上的键实际还在别的节点,会出现「槽有主但键找不到」的情况,必须通过 reshard 或 MIGRATE 完成数据搬运。
涉及多键的操作要求所有键落在同一个槽,否则报 CROSSSLOT:用 hash tag(如 user:{1001}:name 与 user:{1001}:age)把相关键强制放到同一个槽上,是常见的规避方式。
评估扩容是否值得做时,先看键分布是否均匀:槽数量固定且均匀分配,但如果存在热点键,加节点只是增加总容量,单个热键的压力不会分摊,需要先做键设计层面的打散。

易错点

  • 直接 ADDSLOTS 抢槽却不迁移数据:键仍留在旧节点,读写出现不确定的重定向或丢失
  • 手工改槽后未同步其他节点:配置纪元冲突,集群状态可能反复震荡
  • 槽未全部指派就对外服务:cluster_state 不为 ok,客户端直接拒绝请求
  • 把 CLUSTER SLOTS 的输出缓存长期使用:槽分布变化后客户端未及时刷新,出现持续重定向

数据来源与参考

  • Redis 官方文档: CLUSTER ADDSLOTS
  • Redis 官方文档: CLUSTER SLOTS

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌