CLUSTER SLOTS

返回集群槽到节点的映射。

语法

CLUSTER SLOTS

引入版本:3.0.0

复杂度摘要:O(N)

CLUSTER SLOTS 返回有关哪些集群槽映射到哪些 Redis 实例的详细信息。该命令适合由 Redis 集群客户端库实现使用,以便检索(或在收到重定向时更新)将集群 哈希槽 与实际节点网络信息相关联的映射,以便在收到命令时,可以将其发送到可能是命令中指定的键的正确实例。

每个节点的网络信息是一个包含以下元素的数组:

  • 首选端点(IP 地址、主机名或 NULL)
  • 端口号
  • 节点ID
  • 附加网络元数据图

首选端点与端口一起定义客户端应用于发送给定插槽请求的位置。端点的 NULL 值表示节点具有未知端点,并且客户端应连接到用于发送 CLUSTER SLOTS 命令的同一端点,但使用从命令返回的端口。当 Redis 节点位于 Redis 不知道其端点的负载均衡器后面时,此未知端点配置非常有用。将哪个端点设置为首选端点由 cluster-preferred-endpoint-type 配置确定。空字符串 "" 是端点字段以及 ip 字段的另一个异常值,如果节点不知道自己的 IP 地址,则会返回该值。这种情况可能发生在仅包含一个节点或该节点尚未与集群的其余部分组成的集群中。如果节点被错误配置为使用已公布的主机名,但未使用 cluster-announce-hostname 配置主机名,则会显示值 ?。客户端可以将空字符串视为 NULL,即用于将当前命令发送到的同一端点,而 "?" 应被视为未知节点,不一定与服务当前命令的节点相同。

附加网络元数据作为每个节点的第四个参数的映射提供。可能会返回以下网络元数据:

  • IP:当首选端点未设置为IP 时。
  • 主机名:当节点具有已公布的主机名但主端点未设置为主机名时。

嵌套结果数组

每个嵌套结果为:

  • 起始槽位范围
  • 结束槽位范围
  • 主槽范围表示为嵌套网络信息
  • 插槽范围的主节点的第一个副本
  • 第二个复制品
  • ...继续,直到返回该主服务器的所有副本。

每个结果都包括列出的插槽范围内主实例的所有活动副本。失败的副本不会被返回。

第三个嵌套回复保证是该插槽范围的主实例的网络信息。第三个嵌套回复之后的所有网络信息都是主服务器的副本。

如果集群实例具有非连续槽(例如 1-400,900,1800-6000),则每个顶级槽范围回复的主节点和副本网络信息结果将会重复。

> CLUSTER SLOTS
1) 1) (integer) 0
   2) (integer) 5460
   3) 1) "127.0.0.1"
      2) (integer) 30001
      3) "09dbe9720cda62f7865eabc5fd8857c5d2678366"
      4) 1) hostname
         2) "host-1.redis.example.com"
   4) 1) "127.0.0.1"
      2) (integer) 30004
      3) "821d8ca00d7ccf931ed3ffc7e3db0599d2271abf"
      4) 1) hostname
         2) "host-2.redis.example.com"
2) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "127.0.0.1"
      2) (integer) 30002
      3) "c9d93d9f2c0c524ff34cc11838c2003d8c29e013"
      4) 1) hostname
         2) "host-3.redis.example.com"
   4) 1) "127.0.0.1"
      2) (integer) 30005
      3) "faadb3eb99009de4ab72ad6b6ed87634c7ee410f"
      4) 1) hostname
         2) "host-4.redis.example.com"
3) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 30003
      3) "044ec91f325b7595e76dbcb18cc688b6a5b434a1"
      4) 1) hostname
         2) "host-5.redis.example.com"
   4) 1) "127.0.0.1"
      2) (integer) 30006
      3) "58e6e48d41228013e5d9c1c37c5060693925e97e"
      4) 1) hostname
         2) "host-6.redis.example.com"

警告: 在未来的版本中可能会有更多的元素更好地描述节点。一般来说,客户端实现应该仅依赖于某些参数位于指定的固定位置的事实,但可能会出现更多参数并且应该被忽略。同样,客户端库应该尽可能尝试应对旧版本可能只有主端点和端口参数的事实。

行为改变史

  • >= 7.0.0:在节点响应的第一个字段中添加了对主机名和未知端点的支持。

Redis Software 与 Redis Cloud 兼容性

Redis
软件
Redis
Cloud
说明
✅ 标准
✅ 主动-主动
✅ 标准
✅ 主动-主动
仅支持 OSS集群API。从 Redis v7.0.0 开始已弃用。

返回值

RESP2

数组回复:带有网络信息的插槽范围的嵌套列表。

RESP3

数组回复:带有网络信息的插槽范围的嵌套列表。

资料来源:Redis 官方 CLUSTER SLOTS 文档;中文内容参考 Redis 文档许可。