CLUSTER SLOTS (已弃用)
从 Redis 7.0.0 版本开始,此命令被视为已弃用。
迁移或编写新代码时,可以使用 CLUSTER SHARDS
命令代替它。
CLUSTER SLOTS
- 可用版本
- Redis 开源版 3.0.0
- 时间复杂度
- O(N),其中 N 为集群节点总数
- ACL 类别
-
@slow
,
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
:在节点响应的第一个字段中增加了对主机名和未知端点的支持。
RESP2/RESP3 回复
数组回复:包含网络信息的槽范围嵌套列表。历史
- 从 Redis 4.0.0 版本开始:添加了节点 ID。
- 从 Redis 7.0.0 版本开始:添加了附加网络元数据字段。