集群槽 (已弃用)
截至Redis版本7.0.0,此命令被视为已弃用。
在迁移或编写新代码时,可以用CLUSTER SHARDS
替换。
CLUSTER SLOTS
- Available since:
- 3.0.0
- Time complexity:
- O(N) where N is the total number of Cluster nodes
- ACL categories:
-
@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 回复
Array reply: nested list of slot ranges with networking information.历史
- 从 Redis 版本 4.0.0 开始:添加了节点 ID。
- 从 Redis 7.0.0 版本开始:增加了额外的网络元数据字段。