*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。