*Redis CLUSTER SLOTS 命令

CLUSTER SLOTS 返回集群中所有槽到节点的映射关系,用于客户端获取集群拓扑和构建路由表。该命令在 Redis 7.0.0 中已弃用,推荐使用 CLUSTER SHARDS


*语法

CLUSTER SLOTS

*参数说明

无参数。


*返回值

  • Array:每个槽范围为一个数组元素,包含:
    • 槽范围起始编号(Integer)
    • 槽范围结束编号(Integer)
    • 主节点信息数组(IP、端口、节点 ID)
    • 副本节点信息数组(可选,多个副本为多组数组)

*时间复杂度

O(N),其中 N 为集群中所有节点的总数。


*示例

*查看槽映射关系

> CLUSTER SLOTS
1) 1) (integer) 0
   2) (integer) 5460
   3) 1) "192.168.1.10"
      2) (integer) 6379
      3) "3c3a0c74aae0b56179ccb1a76b7850a3b1f1b26b"
   4) 1) "192.168.1.13"
      2) (integer) 6379
      3) "e7d1eecce10fd2bb2b5f7755b0c1d6c2d1e1f2a3"
2) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "192.168.1.11"
      2) (integer) 6379
      3) "67ed2db8d677e59ec4a4cefb06858cf2a1a89fa1"
   4) 1) "192.168.1.14"
      2) (integer) 6379
      3) "f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9"
3) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "192.168.1.12"
      2) (integer) 6379
      3) "07c37dfeb235213a872192d90877d0cd55635b91"
   4) 1) "192.168.1.15"
      2) (integer) 6379
      3) "b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0"

*无副本的槽范围

> CLUSTER SLOTS
1) 1) (integer) 0
   2) (integer) 16383
   3) 1) "192.168.1.10"
      2) (integer) 6379
      3) "3c3a0c74aae0b56179ccb1a76b7850a3b1f1b26b"

*常见错误

错误 原因 解决
ERR This instance has cluster support disabled 未启用集群模式 在 redis.conf 中设置 cluster-enabled yes

*最佳实践

  • Redis 7.0+ 请使用 CLUSTER SHARDS:SLOTS 已弃用,未来版本可能移除。新开发应使用 SHARDS,它提供更完整的分片和节点信息
  • 客户端驱动(如 redis-py-cluster、JedisCluster)传统上使用此命令初始化集群拓扑,但新版本应迁移到 SHARDS
  • 输出数组中,每个元素的第 3 项是主节点,第 4 项及之后是副本节点。副本节点按优先级排序,第一个副本是故障转移的首选
  • 生产环境建议缓存此命令结果,避免频繁查询,但需在拓扑变化时(如故障转移、槽迁移)及时刷新

*FAQ

Q1: SLOTS 和 SHARDS 输出格式有什么不同? A: SLOTS 返回嵌套数组,格式紧凑:每行包含 [start, end, [ip, port, node-id], [replica-ip, replica-port, replica-id]...]。SHARDS 返回以分片为单位的字典格式,包含更丰富的元数据(如角色、健康状态、复制偏移量)。

Q2: 为什么 Redis 7.0 弃用了 SLOTS? A: SLOTS 的输出格式较为扁平,且无法表达分片(shard)概念。随着 Redis Cluster 引入分片级别的管理(如 shard ID、主从关系),SHARDS 以更结构化的方式提供了完整信息,更适合现代客户端驱动和运维需求。

Q3: 现有客户端使用 SLOTS 会有问题吗? A: 短期内不会。Redis 7.0+ 仍保留 SLOTS 命令,但标记为已弃用。建议客户端库逐步迁移到 SHARDS,以获取更完整的集群信息和更好的未来兼容性。