Redis CLUSTER DELSLOTS 命令使一个指定的 Redis Cluster 节点去忘记一个主节点正在负责的哈希槽,这些哈希槽通过参数指定。
在已经接收到 DELSLOTS 命令的节点环境中,并且因此已经去除了指定哈希槽的关联,我们认为这些哈希槽是未绑定的 。请注意,当一个节点还没有被配置去负责它们(可以通过 ADDSLOTS 完成槽的分配)并且如果该节点没有收到关于谁拥有这些哈希槽的消息时(节点通过心跳包或者更新包获取消息),这些未绑定的哈希槽是自然而然本来就存在的。如果一个节点认为一些哈希槽是未绑定的,但是从其他节点接收到一个心跳包,得知这些哈希槽已经被其他节点负责,那么会立即确立其关联关系。而且,如果接收到一个心跳包或更新包的配置纪元比当前节点的大,那么会重新建立关联。
命令格式
CLUSTER DELSLOTS slot [slot ...]
可用版本:>=3.0.0
时间复杂度:O(N),N 为集群哈希插槽的数目。
值得注意的是:
- 命令只在参数指定的哈希槽已经和某些节点关联时有效。
- 如果同一个哈希槽被指定多次,该命令会失败。
- 命令执行的副作用是,因为不在负责哈希槽,节点可能会进入下线状态。
命令返回值
如果命令成功执行返回 OK,否则返回一个错误。
使用场景
命令只在集群模式下工作,并且对调试非常有用,并且当创建新的集群时,为了可以手动的协调集群配置。当前没有被 redis-trib 使用,并且主要为了 API 的完整性存在。
示例
以下命令会移除槽 5000 和槽 5001 与接收该命令节点的关联:
redis> CLUSTER DELSLOTS 5000 5001
OK