*Redis CLUSTER ADDSLOTSRANGE 命令
CLUSTER ADDSLOTSRANGE 将一段或多段连续的槽位范围分配给当前节点。
*语法
CLUSTER ADDSLOTSRANGE 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 ADDSLOTSRANGE 0 5460
OK
*分配多个不连续的槽位范围
> CLUSTER ADDSLOTSRANGE 0 1000 2000 3000 5000 5460
OK
*验证槽位分配
> CLUSTER NODES
... myself,master - 0 0 1 connected 0-1000 2000-3000 5000-5460
*完整分配示例(新建主节点)
# 假设 3 主 3 从集群,新节点分配 5461-10922
> CLUSTER ADDSLOTSRANGE 5461 10922
OK
> CLUSTER INFO
cluster_slots_assigned:16384
cluster_slots_ok:16384
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR Slot |
槽位已被其他节点分配 | 先用 CLUSTER DELSLOTS 或 CLUSTER SETSLOT 释放 |
| 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 Trying to migrate keys in node | 节点正在迁移槽位 | 等待迁移完成后再操作 |
*最佳实践
- 优先使用 ADDSLOTSRANGE(Redis 7.0+)替代多次 ADDSLOTS,减少命令数量
- 分配前先用 CLUSTER SLOTS 或 CLUSTER NODES 确认槽位空闲
- 集群首次创建时,将 16384 个槽位均匀分配给各主节点(约 5461 个/节点,3 主时)
- 新节点加入集群后需先执行 CLUSTER MEET,再分配槽位
- 大规模槽位分配建议分批执行,观察集群状态
*FAQ
Q1: ADDSLOTSRANGE 和 ADDSLOTS 有什么区别?
A: ADDSLOTS 逐个指定槽位(CLUSTER ADDSLOTS 1 2 3 ...),ADDSLOTSRANGE 指定连续范围(CLUSTER ADDSLOTSRANGE 1 3 等效)。范围模式更简洁高效。
Q2: 为什么分配后 CLUSTER INFO 还是显示 fail? A: 需要所有 16384 个槽位都被分配后 cluster_state 才会变为 ok。检查是否还有未分配的槽位。
Q3: 能否分配已被其他节点持有的槽位? A: 不能直接分配。必须先用 CLUSTER SETSLOT ... NODE 迁移,或让原节点执行 CLUSTER DELSLOTS 释放。
Q4: Redis 哪个版本开始支持 ADDSLOTSRANGE? A: Redis 7.0.0 新增此命令。