redis:CLUSTER ADDSLOTS、CLUSTER DELSLOTS

华昕
2023-12-01

CLUSTER ADDSLOTS

语法

CLUSTER ADDSLOTS slot [slot ...]
  • 自3.0.0起可用。

  • 时间复杂度: O(N)其中N是散列槽参数的总数

作用

  • 此命令仅适用于集群模式

  • Redis CLUSTER ADDSLOTS 命令用于把一组 hash slots 分配给接收命令的节点。这个命令仅在 cluster 模式下生效,如果命令执行成功,节点将指定的 hash slots 映射到自身,节点将获得指定的 hash slots,同时开始向集群广播新的配置。

  • 但,请注意:

    • 仅当从接收命令的节点来看,所有指定的插槽当前未分配时,该命令才起作用。节点将 拒绝接纳已经分配到其他节点的slots(包括它自己的)。
    • 同一个slot被指定多次的情况下命令会失败。
    • 执行这个命令有一个副作用,如果slot作为其中一个参数设置为importing,一旦节点向自己分配该slot(以前未绑定)这个状态将会被清除。

返回值

  • simple-string-reply: 如果命令执行成功,返回 OK,否则返回错误信息。

例子

以下命令分配 1 2 3 slot 到接收命令的节点:

redis> CLUSTER ADDSLOTS 1 2 3
OK

但是试图再次执行命令结果将会错误,因为 slots 已经被分配了:

redis> CLUSTER ADDSLOTS 1 2 3
ERR Slot 1 is already busy

使用场景

该命令仅适用于集群模式,在以下 Redis 集群操作中很有用:

  • 创建新集群时,ADDSLOTS 用于主节点初始化分配可用的 hash slots。
  • 修复某些插槽未分配时损坏的集群

注意:有关插槽传播和警告的信息

  • 请注意,一旦节点为其自身分配一组插槽,它将开始在心跳包头中传播此信息。但是,其他节点只有在插槽尚未与另一个节点绑定的情况下,或者通告新散列插槽的节点的配置历元大于表中当前列出的节点时才会接受信息。
  • 这意味着这个命令只应该被管理 Redis 集群应用客户端所使用,比如redis-trib,而且这个命令如果使用了错误的上下文会导致集群处于错误的状态或者导致数据丢失。

CLUSTER DELSLOTS

语法

CLUSTER DELSLOTS slot [slot ...]
  • 自3.0.0起可用
  • 时间复杂度: O(N)其中N是散列槽参数的总数

作用

  • 在redis cluster中,每个节点都会知道(跟踪)哪些主节点正在负责哪些特定的哈希槽
  • DELSLOTS命令要求特定的redis集群节点忘记哪个主服务器正在提供参数中指定的散列槽
  • 在已经接收到delslots命令的节点环境中,并且因此已经去除了指定的哈希槽的关联,我们就认为这些哈希槽是未绑定的
  • 如果一个节点认为一些哈希槽是未绑定的,但是从其他节点接收到一个心跳包,得知这些哈希槽已经被其他节点负责,那么会立即确认其关系。而且,如果接收到一个心跳包或者更新包的配置纪元比当前节点的大,那么会重新建立关联。

但是,请注意:

  1. 该命令仅适用于所有指定的插槽已与某个节点关联的情况。
  2. 如果多次指定同一个插槽,则命令失败。
  3. 这个命令的副作用是:如果某个节点不再负责任何哈希槽,这个节点就会进入下线状态

返回值

  • simple-string-reply: OK如果命令成功。否则会返回错误。

举个例子

下面命令会移除槽5000和槽5001与接收该命令节点的关联:

> CLUSTER DELSLOTS 5000 500OK
 类似资料:

相关阅读

相关文章

相关问答