*Redis CLUSTER DELSLOTS 命令

从当前节点移除指定槽位。


*语法

CLUSTER DELSLOTS slot [slot ...]

*参数说明

参数 类型 必填 说明
slot Integer 槽位编号,可指定多个

*返回值

条件 返回值
成功 OK

*时间复杂度

O(N)

*

*示例

> CLUSTER DELSLOTS 0 1 2
OK

*常见错误

错误 原因 解决
槽位有数据 槽位中仍有数据未迁移 先使用 MIGRATE 迁移数据或删除数据后再执行
槽位正在迁移中 槽位处于迁移状态 等待迁移完成后再执行
未在集群模式下运行 单机版 Redis 不支持集群命令 确认在集群模式下运行或启用 cluster-enabled

*最佳实践

  1. 谨慎使用CLUSTER DELSLOTS 会释放槽位,可能导致数据不可访问。通常配合槽位迁移使用。

  2. 迁移后清理:先用 CLUSTER SETSLOT 配合 MIGRATE 将数据迁出,再执行 DELSLOTS 清理空槽位。

  3. 避免批量删除:不要一次性删除大量槽位,应分批次执行并检查集群状态。

  4. 监控集群状态:执行后使用 CLUSTER INFOCLUSTER NODES 确认集群状态正常。

*5. 保留最小槽位覆盖:确保每个主节点至少保留一个槽位,避免节点完全空闲导致集群拓扑异常。

*FAQ

Q1: CLUSTER DELSLOTS 会删除槽位中的数据吗? A: 不会删除数据,但会使该槽位不再由当前节点负责。如果槽位中仍有数据,集群会进入异常状态,需先迁移或删除数据再执行。

Q2: CLUSTER DELSLOTS 和 CLUSTER ADDSLOTS 有什么区别? A: CLUSTER ADDSLOTS 将槽位分配给当前节点;CLUSTER DELSLOTS 从当前节点移除槽位。两者互为逆操作。

Q3: 可以同时删除所有槽位吗? A: 可以,但不建议。删除所有槽位后,该节点将不再负责任何数据,成为无数据节点。

Q4: CLUSTER DELSLOTS 是原子操作吗? A: 对单个节点是原子的,但集群状态同步需要一定时间。其他节点通过 GOSSIP 协议最终感知槽位变化。

Q5: 删除槽位后,集群状态显示 fail 怎么办? A: 说明槽位中仍有数据未被迁移。使用 CLUSTER SETSLOT 配合 MIGRATE 将数据迁移到其他节点后再执行 DELSLOTS。