*Redis CLUSTER FLUSHSLOTS 命令

CLUSTER FLUSHSLOTS 从当前节点移除所有已分配的槽位,并将这些槽位中的 key 全部删除。


*语法

CLUSTER FLUSHSLOTS

*参数说明

无参数。


*返回值

  • OK:操作成功
  • Error:节点处于从节点状态或集群异常

*时间复杂度

O(N),N 为当前节点持有的槽位中所有 key 的总数。


*示例

*清空当前节点所有槽位

> CLUSTER FLUSHSLOTS
OK

*验证槽位已清空

> CLUSTER NODES
... myself,master - 0 0 1 connected
> CLUSTER INFO
cluster_slots_assigned:16384
cluster_slots_ok:16384
# 但当前节点无持有槽位

*配合重新分配使用

# 假设节点需要下线重分配
> CLUSTER FLUSHSLOTS
OK
> CLUSTER FORGET <node-id>
OK

*常见错误

错误 原因 解决
ERR Node is not empty 尝试在仍有槽位的节点上执行其他集群操作 先 FLUSHSLOTS 或迁移槽位
ERR I am a slave 从节点不能执行此操作 在主节点上执行
ERR Cluster is down 集群状态异常 修复集群状态后再操作

*最佳实践

  • ⚠️ 危险命令:会立即删除当前节点所有持有槽位中的数据,不可恢复
  • 仅在确认节点需要完全清空槽位且数据已备份或迁移后使用
  • 生产环境优先使用 CLUSTER SETSLOT 配合 MIGRATE 做平滑迁移
  • 下线节点前:先迁移槽位 → 确认无数据 → FLUSHSLOTS → FORGET
  • 建议在维护窗口期执行,避免影响集群可用性

*FAQ

Q1: FLUSHSLOTS 和 FLUSHDB 有什么区别? A: FLUSHSLOTS 只删除当前节点持有的槽位中的 key,并移除槽位分配;FLUSHDB 删除整个数据库的 key(集群模式下不推荐使用)。

Q2: 执行后数据还能恢复吗? A: 不能。此命令直接删除数据,无备份机制。执行前务必备份或确认数据已迁移。

Q3: 从节点可以执行 FLUSHSLOTS 吗? A: 不可以。此命令只能在主节点上执行。

Q4: 执行后 clusterslotsassigned 会减少吗? A: 不会减少全局的 assigned 数,只是当前节点不再持有这些槽位。需要将这些槽位分配给其他节点,否则 cluster_state 会变为 fail。