*Redis CLUSTER DELSLOTSRANGE 命令
CLUSTER DELSLOTSRANGE 从当前节点移除一段或多段连续的槽位范围分配。
*语法
CLUSTER DELSLOTSRANGE start-slot end-slot [start-slot end-slot ...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| start-slot | Integer | 是 | 槽位范围起始编号(0-16383) |
| end-slot | Integer | 是 | 槽位范围结束编号(0-16383,必须 ≥ start-slot) |
*返回值
- OK:所有槽位移除成功
- Error:槽位不属于当前节点、参数无效或超出范围
*时间复杂度
O(N),N 为移除的槽位总数。
*示例
*移除单个槽位范围
> CLUSTER DELSLOTSRANGE 0 5460
OK
*移除多个不连续的槽位范围
> CLUSTER DELSLOTSRANGE 0 1000 2000 3000 5000 5460
OK
*验证槽位已移除
> CLUSTER NODES
... myself,master - 0 0 1 connected 1001-1999 3001-4999
*配合 ADDSLOTSRANGE 调整分配
> CLUSTER DELSLOTSRANGE 5000 5460
OK
> CLUSTER ADDSLOTSRANGE 5461 6000
OK
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR Slot |
槽位已经不属于当前节点 | 确认槽位归属 |
| ERR Invalid or out of range slot | 槽位编号不在 0-16383 范围内 | 检查槽位编号 |
| ERR end slot is smaller than start slot | end-slot < start-slot | 确保 end-slot ≥ start-slot |
| ERR Slot |
槽位中仍有数据 | 先迁移数据或删除 key |
*最佳实践
- 优先使用 DELSLOTSRANGE(Redis 7.0+)替代多次 DELSLOTS
- 移除前必须确保槽位中无数据,否则可能导致数据丢失或集群状态异常
- 生产环境建议先用
CLUSTER SETSLOT ... MIGRATING+ MIGRATE 迁移数据,再移除槽位 - 集群缩容时,先迁移槽位到新节点,再从旧节点移除
- 大规模移除建议分批执行,每批后检查集群状态
*FAQ
Q1: DELSLOTSRANGE 和 DELSLOTS 有什么区别?
A: DELSLOTS 逐个指定槽位(CLUSTER DELSLOTS 1 2 3),DELSLOTSRANGE 指定连续范围(CLUSTER DELSLOTSRANGE 1 3 等效)。范围模式更简洁高效。
Q2: 移除槽位后数据会丢失吗? A: 如果槽位中仍有 key,直接移除会导致数据不可访问。必须确保数据已迁移或删除。
Q3: 移除后 cluster_state 会变 fail 吗? A: 如果移除后存在未分配的槽位,cluster_state 会变为 fail。需要将这些槽位分配给其他节点。
Q4: Redis 哪个版本开始支持 DELSLOTSRANGE? A: Redis 7.0.0 新增此命令。