集群命令
CLUSTER ADDSLOTS
语法
CLUSTER ADDSLOTS slot [slot ...]
此命令用于将特定的槽位分配给给定节点。接收命令的节点将执行以下检查:
- 节点将拒绝获取从其角度看已分配给另一个节点的槽位的所有权。
- 如果一个节点被指定多次,该命令将失败。
- 如果指定的槽位值超出指定范围(0-16383),该命令将返回超出范围错误。
此命令最初用于设置 Redis 集群或修复因故障可能导致槽位范围未分配的损坏集群。
RESP 回复
成功时返回 +OK,否则返回 --ERR 消息
CLUSTER ADDSLOTSRANGE
语法
CLUSTER ADDSLOTSRANGE start-slot end-slot [start-slot end-slot ...]
此命令与 ADDSLOTS 类似,唯一的区别是它允许指定分配给接收节点的槽位范围。
RESP 回复
成功时返回 +OK,否则返回 --ERR 消息
CLUSTER BUMPEPOCH
语法
CLUSTER BUMPEPOCH
提升接收节点的配置纪元(config epoch)。配置纪元在内部用于在整个集群中应用配置更改。迁移和故障转移操作在必要时会自动提升配置纪元。集群协调器应谨慎使用此命令,根据需要调整集群配置。
RESP 回复
成功时返回 +OK,否则返回 --ERR 消息(如果有)
CLUSTER BANLIST
语法
CLUSTER BANLIST
返回当前禁止添加到集群的节点列表及其以秒为单位的过期时间。此命令与 CLUSTER FORGET
结合使用,以监控哪些节点被禁止添加到集群中。
RESP 回复
返回字符串“nodeid : expiry”的数组列表或空数组。
127.0.0.1:7000> cluster banlist
1) "ad9e5b8bde5ffb0cf7a3372fe0345f765186983f : 57"
CLUSTER COUNTKEYSINSLOT
语法
CLUSTER COUNTKEYSINSLOT slot
返回哈希到相应槽位的现有键的数量。该命令仅查询接收节点的数据。对于接收节点不拥有的槽位,返回的结果始终为零。
RESP 回复
返回整数值。
CLUSTER DELKEYSINSLOT
语法
CLUSTER DELKEYSINSLOT slot [slot ...]
此命令要求接收节点删除映射到所提供节点的所有键。集群操作员可以使用此命令清除不再由接收节点服务的任何孤立键。
RESP 回复
成功时返回 +OK,否则返回 --ERR 消息(如果有)
CLUSTER DELKEYSINSLOTRANGE
语法
CLUSTER DELKEYSINSLOTRANGE start-slot end-slot [start-slot end-slot ...]
此命令与 DELKEYSINSLOT 类似,唯一的区别是它允许指定槽位范围。
RESP 回复
成功时返回 +OK,否则返回 --ERR 消息(如果有)
CLUSTER DELSLOTS
语法
CLUSTER DELSLOTS slot [slot ...]
此命令要求接收节点忘记哪个主节点服务于相应的槽位。请注意,此命令仅适用于接收节点。忘记槽位不会传播到其他节点。接收节点不会停止接受 gossip 消息。在这种情况下,如果从远程节点接收到包含这些节点分配的 gossip 消息,如果槽位所有者的配置纪元大于本地副本,该节点将接受分配。
RESP 回复
成功时返回 +OK,否则返回 --ERR 消息(如果有)
CLUSTER DELSLOTSRANGE
语法
CLUSTER DELSLOTSRANGE start-slot end-slot [start-slot end-slot ...]
此命令与 DELSLOTS 类似,唯一的区别是它允许指定要在接收节点处忘记的槽位范围。
RESP 回复
成功时返回 +OK,否则返回 --ERR 消息(如果有)
CLUSTER ENDPOINT
语法
CLUSTER ENDPOINT node-id
此命令返回与给定节点 ID 关联的端点。如果接收节点没有关于所提供节点 ID 的任何信息,它将返回“unassigned:0”。
RESP 回复
端点“地址”的批量字符串:端口”或“unassigned:0”
CLUSTER FAILOVER
语法
CLUSTER FAILOVER [FORCE | ABORT]
此命令发送给副本以启动手动故障转移并扮演其主节点的角色。如果主节点可达,可以调用它来安全地将当前主节点切换到副本节点而不会丢失任何数据。当副本收到上述命令时,它会执行以下步骤:
- 向主节点发出停止写入命令。可以使用 FORCE 选项覆盖此行为。
- 主节点在阻止任何写入后回复当前复制偏移量。可以使用 FORCE 选项覆盖此行为。
- 副本等待其本地复制偏移量与主节点的偏移量匹配。可以使用 FORCE 选项覆盖此行为。
- 副本接管作为新主节点并提升其本地配置纪元。
- 新主节点通过 gossip 传播配置更改。
集群操作员还可以根据需要使用 ABORT 选项中止正在进行的故障转移。
RESP 回复
成功时返回 +OK,否则返回 --ERR 消息(如果有)。这并不意味着故障转移已成功,只表示故障转移后台任务已启动。
CLUSTER FORGET
语法
CLUSTER FORGET node-id [expiry-in-seconds]
此命令用于从接收节点的角度忘记一个节点。由于集群中的其他节点可能知道正在被遗忘的节点,因此被遗忘的节点可能会通过 gossip 重新添加。因此,每个被遗忘的节点都与一个过期时间关联,该过期时间会阻止该节点在过期期间被重新添加。集群操作员可以提供自定义的过期时间。默认值为 60 秒。为了在整个集群中忘记该节点,操作员必须单独向集群中的所有节点发出 forget 命令。如果发生以下任何情况,该命令将失败:
- 节点不能忘记自己。
- 无法忘记未知节点。
- 接收节点是副本,并且要忘记的节点是其主节点。
RESP 回复
成功时返回 +OK,否则返回 --ERR 消息(如果有)。
CLUSTER GETKEYSINSLOT
语法
CLUSTER GETKEYSINSLOT slot count
此命令返回映射到相应槽位的现有键的数组。它在手动重新分片期间与其他相关命令(即 countkeysinslot)一起使用。
RESP 回复
键数组或为空。
CLUSTER INFO
语法
CLUSTER INFO
CLUSTER INFO 提供关于 Redis 集群关键参数的 INFO 样式信息。
RESP 回复
批量字符串回复:一个命名字段和值之间的映射,形式为:由两个字节 CRLF 分隔的新行组成的行。
CLUSTER KEYSLOT
语法
CLUSTER KEYSLOT <key>
该命令返回一个整数值,用于标识相应键哈希到的槽位。
RESP 回复
返回 0 到 16383 范围内的整数值
CLUSTER MEET
语法
CLUSTER MEET address port
此命令用于将 Garnet 集群实例相互连接。默认情况下,节点不信任彼此,只接受通过 cluster meet 或通过来自另一个受信任节点的 gossip 消息引入的节点。集群操作员在设置集群时应该通过发出 meet 来连接节点。然而,如上所述,发出的 meet 不需要是相互的。
RESP 回复
成功时返回 +OK,否则返回 --ERR 消息(如果有)。
CLUSTER MYID
语法
CLUSTER MYID
此命令返回接收节点的唯一节点 ID。
RESP 回复
返回节点 ID 的批量字符串
CLUSTER MYPARENTID
语法
CLUSTER MYPARENTID
如果节点是副本,此命令返回其父节点(即主节点)的节点 ID。
RESP 回复
返回父节点的批量字符串,否则返回其自己的 ID。
CLUSTER NODES
语法
CLUSTER NODES
此命令从接收节点的角度返回集群配置。集群操作员应使用此命令检索集群信息以进行管理任务、调试和配置检查。
该命令的输出是空格分隔的 CSV 字符串,其中包含集群中所有已知节点的信息。
PS C:\Dev> redis-cli -p 7000
127.0.0.1:7000> cluster nodes
e39d271c7c4a4afca0e3d97154d2788502af12e3 192.168.1.26:7000@17000,test-host1 myself,master - 0 0 1 connected 0-5461
e0a69e89458c078d61a7a38f8e5f191522dcb1a7 192.168.1.26:7001@17001,test-host2 master - 0 0 2 connected 5462-10922
6fad21a7b28f1f2f05324257abf5e5e3b54e3286 192.168.1.26:7002@17002,test-host3 master - 0 0 3 connected 10923-16383
93a06cbed623ab044f809e2c67f3c3607ec0cc43 192.168.1.26:7003@17003,test-host4 slave e0a69e89458c078d61a7a38f8e5f191522dcb1a7 0 0 7 connected
03742a8ce43a911a81562e4947194bf54a8da2c6 192.168.1.26:7004@17004,test-host5 slave 6fad21a7b28f1f2f05324257abf5e5e3b54e3286 0 0 8 connected
e5f1c7ec263e5b9133d88535572901af881ab644 192.168.1.26:7005@17005,test-host6 slave e39d271c7c4a4afca0e3d97154d2788502af12e3 0 0 9 connected
127.0.0.1:7000>
每行包含以下字段:
<id> <ip:port@cport[,hostname]> <flags> <master> <ping-sent> <pong-recv> <config-epoch> <link-state> <slot> <slot> ... <slot>
为了与 RESP 协议兼容,当响应 cluster nodes 命令时,我们会发出上述信息。然而,并非所有信息都被积极使用或更新。对于我们在 Garnet 中积极使用的每个信息,我们提供以下简短描述:
- id:节点 ID,一个在启动时为每个节点生成的 40 个字符的全局唯一字符串。
- ip:端口@cport:客户端应连接以发出查询的节点端点。第二个端口未被 Garnet 实例积极使用,也未开放通信。
- hostname:一个人类可读的字符串,始终自动从系统获取。目前不可配置。
- flags:逗号分隔的标志 myself,master,slave
- master:如果节点是副本且主节点已知,则这将是主节点的节点 ID,否则为 -
- ping-sent:不适用
- pong-recv:不适用
- config-epoch:接收节点的本地配置纪元
- slot:由关联节点服务的槽位。如果节点是副本,则它隐式地为该槽位提供读取服务。
注意:不幸的是,对于此命令,“slave”一词是协议的一部分,在 API 的该部分被弃用之前无法删除。
RESP 回复
返回序列化的集群配置的批量字符串。
CLUSTER REPLICAS
语法
CLUSTER REPLICAS node-id
此命令返回一个节点数组,这些节点复制由提供的节点 ID 指定的主节点。返回的信息使用与 cluster nodes 中相同的格式。
RESP 回复
复制相应节点的节点列表数组。
CLUSTER REPLICATE
语法
CLUSTER REPLICATE node-id
此命令配置接收节点以复制由相应节点 ID 指示的主节点。命令成功后,其余节点将通过 gossip 获知配置更改。
收到上述命令的节点将在满足以下条件的情况下接受它:
- 接收节点是主节点。
- 提供的节点 ID 指的是已知的主节点。
- 提供的节点 ID 与接收节点的节点 ID 不同。
- 接收节点不服务任何槽位。
收到命令后,实例将立即尝试连接到主节点并检索最新的主节点检查点。收到后,它将从主节点启动 AOF 同步并开始响应读取请求。复制请求是异步执行的,因此对客户端的响应将是即时的。这并不意味着副本已成功连接,只表示复制请求已成功启动。
RESP 回复
成功时返回 +OK,否则返回 --ERR 消息(如果有)。
CLUSTER SET-CONFIG-EPOCH
语法
CLUSTER SET-CONFIG-EPOCH config-epoch
此命令在新节点中设置特定的配置纪元。它只有在以下情况下才能成功:
- 节点表为空。
- 接收节点的配置纪元为零。
此命令通常在设置新集群时调用。
RESP 回复
成功时返回 +OK,否则返回 --ERR 消息(如果有)。
CLUSTER SETSLOT
语法
CLUSTER SETSLOT slot <IMPORTING source-node-id | MIGRATING target-node-id | NODE node-id | STABLE>
此命令用于在迁移期间更改接收节点中槽位的状态。集群操作员可以将此命令与 MIGRATE、COUNTKEYSINSLOT 和 GETKEYSINSLOT 结合使用,以在集群中的节点之间转移槽位所有权。
以下选项可用:
MIGRATING
槽位状态设置为 MIGRATING,当且仅当:
- 接收节点是槽位的主所有者。
- 槽位尚未处于迁移状态。
- 指定的节点 ID 是已知的,并且它对应于一个主节点。
由于上述条件,槽位只能在源节点处转换为 MIGRATING 状态。因此,对与处于 MIGRATING 状态的槽位相关的键的任何查询,将在源节点处按如下方式处理:
- 如果键存在,读取命令照常处理,否则它们将使用 -MOVED 响应重定向到目标节点。
- 现有键的写入请求将使用 -MIGRATING 响应拒绝,否则它们将使用 -ASK 响应重定向到目标节点。
注意: 此状态更改是瞬态的,因此不会通过 gossip 传播到集群中的其他节点。但是,仍将发出 -MOVED 重定向,指向槽位的源节点。
IMPORTING
槽位状态设置为 IMPORTING,当且仅当:
- 接收节点是不拥有该槽位的主节点。
- 相应的源节点 ID 是拥有该槽位的已知主节点。
只有在前面有 ASKING 的情况下,才处理与导入槽位相关的键的任何查询,否则所有请求都会发出 -MOVED 响应。
注意: 此状态更改是瞬态的,因此不会通过 gossip 传播到集群中的其他节点。但是,仍将发出 -MOVED 重定向,指向槽位的源节点。
STABLE
此选项用于清除 MIGRATING 或 IMPORTING 状态。它主要用于修复因可能故障而陷入不良状态的集群。
NODE
此选项用于将迁移中的槽位的所有权转移到目标节点。
如果接收命令的节点处于导入状态(即目标节点),它将把自己设置为该节点的所有者并提升配置纪元。如果接收命令的节点处于迁移状态(即源节点),它将把该节点的所有权分配给目标节点,但不会提升纪元。
注意 有关该命令的更多信息,请查看键迁移页面。
RESP 回复
成功时返回 +OK,否则返回 --ERR 消息(如果有)。
CLUSTER SETSLOTRANGE
语法
CLUSTER SETSLOTRANGE <IMPORTING source-node-id | MIGRATING target-node-id | NODE node-id | STABLE> slot-start slot-end [slot-start slot-end ...]
此命令与 SETSLOT 类似,唯一的区别是它允许指定槽位范围。
RESP 回复
成功时返回 +OK,否则返回 --ERR 消息(如果有)。
CLUSTER SHARDS
语法
CLUSTER SETSLOTRANGE <IMPORTING source-node-id | MIGRATING target-node-id | NODE node-id | STABLE> slot-start slot-end [slot-start slot-end ...]
此命令返回集群中分片的详细信息。分片具有单个主节点和多个副本,它们服务于特定范围的槽位。返回的信息是根据接收节点的本地配置视图生成的。
命令输出示例如下所示:
PS C:\Dev> redis-cli -p 7001
127.0.0.1:7001> cluster shards
1) 1) "slots"
2) 1) (integer) 5462
2) (integer) 10922
3) "nodes"
4) 1) 1) "id"
2) "e0f69d9f8d4d2b2fa100d1dd1fbd7bc2cf4e9396"
3) "port"
4) (integer) 7001
5) "address"
6) "10.159.2.73"
7) "role"
8) "PRIMARY"
9) "replication-offset"
10) (integer) 64
11) "health"
12) "online"
2) 1) "id"
2) "4e79261982fe0162262da2f912f6dd4bc9161099"
3) "port"
4) (integer) 7003
5) "address"
6) "10.159.2.73"
7) "role"
8) "REPLICA"
9) "replication-offset"
10) (integer) 0
11) "health"
12) "online"
2) 1) "slots"
2) 1) (integer) 0
2) (integer) 5461
3) "nodes"
4) 1) 1) "id"
2) "228133c63d1151f784c9404241c8b06afbc83117"
3) "port"
4) (integer) 7000
5) "address"
6) "10.159.2.73"
7) "role"
8) "PRIMARY"
9) "replication-offset"
10) (integer) 0
11) "health"
12) "online"
2) 1) "id"
2) "96cd8f6d4b57cea02deb9147cdcfac79a4641d0c"
3) "port"
4) (integer) 7005
5) "address"
6) "10.159.2.73"
7) "role"
8) "REPLICA"
9) "replication-offset"
10) (integer) 0
11) "health"
12) "online"
3) 1) "slots"
2) 1) (integer) 10923
2) (integer) 16383
3) "nodes"
4) 1) 1) "id"
2) "810544afb338b6b217a6e169b0115d70337bf557"
3) "port"
4) (integer) 7002
5) "address"
6) "10.159.2.73"
7) "role"
8) "PRIMARY"
9) "replication-offset"
10) (integer) 0
11) "health"
12) "online"
2) 1) "id"
2) "2035250845f809ab23a2f4c51e73b1c4541c0092"
3) "port"
4) (integer) 7004
5) "address"
6) "10.159.2.73"
7) "role"
8) "REPLICA"
9) "replication-offset"
10) (integer) 0
11) "health"
12) "online"
RESP 回复
数组回复:按分片分组的哈希范围和节点信息的嵌套列表。
CLUSTER SLOTS
语法
CLUSTER SLOTS
CLUSTER SLOTS 返回有关哪些集群槽位映射到哪个 Redis 实例的详细信息。
RESP 回复
数组回复:包含网络信息的槽位范围嵌套列表。
ASKING
语法
ASKING
当集群客户端收到 -ASK 重定向时,ASKING 命令会发送到目标节点,然后是重定向的命令。这通常由集群客户端自动完成。
RESP 回复
简单字符串回复:OK。
READONLY
语法
READONLY
为连接到 Redis 集群副本节点的连接启用读取查询。
RESP 回复
简单字符串回复:OK。
READWRITE
语法
READWRITE
为连接到 Redis 集群副本节点的连接禁用读取查询。
RESP 回复
简单字符串回复:OK。
RESET
语法
RESET
此命令执行连接服务器端上下文的完全重置,模拟断开连接并重新连接的效果。
RESP 回复
简单字符串回复:RESET。