CLUSTER SLOTS (已弃用)

从 Redis 版本 7.0.0 开始,此命令被视为已弃用。

它可以替换为CLUSTER SHARDS迁移或编写新代码时。

语法
CLUSTER SLOTS
从以下位置开始可用:
3.0.0
时间复杂度:
O(N),其中 N 是 Cluster 节点的总数
ACL 类别:
@slow,

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

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

  • 首选终端节点(IP 地址、主机名或 NULL)
  • 端口号
  • 节点 ID
  • 其他网络元数据的映射

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

其他网络元数据在每个节点的第四个参数上以映射的形式提供。 可能会返回以下网络元数据:

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

嵌套结果数组

每个嵌套的结果是:

  • 起始槽范围
  • End 插槽范围
  • 以嵌套网络信息表示的插槽范围的主控
  • slot range 的 master 的第一个副本
  • 第二个副本
  • ...继续,直到返回此主服务器的所有副本。

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

第三个嵌套回复保证是 slot 范围内的 master 实例的联网信息。 第三个嵌套回复之后的所有网络信息都是 master 的副本。

如果集群实例具有不连续的槽(例如 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"

警告:在未来的版本中,可能会有更多元素更好地描述节点。 通常,客户端实现应该只依赖于某些参数位于指定固定位置的事实,但可能会有更多参数跟随,应该忽略。 同样,如果可能,客户端库应尝试处理旧版本可能只有 primary endpoint 和 port 参数的事实。

行为更改历史记录

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

RESP2/RESP3 回复

Array reply:包含网络信息的槽范围的嵌套列表。

历史

  • 从 Redis 版本 4.0.0 开始:添加了节点 ID。
  • 从 Redis 版本 7.0.0 开始:添加了额外的网络元数据字段。
为本页评分
返回顶部 ↑