*Redis CLUSTER SETSLOT 命令 将哈希槽绑定到指定节点
*CLUSTER SETSLOT
*语法
CLUSTER SETSLOT slot IMPORTING <node-id>
CLUSTER SETSLOT slot MIGRATING <node-id>
CLUSTER SETSLOT slot STABLE
CLUSTER SETSLOT slot NODE <node-id>
*说明
修改指定槽位的状态。这是 Redis Cluster 槽位迁移的核心命令,有四种子命令:
IMPORTING:
- 将槽位标记为正在从指定节点导入到当前节点
- 当前节点会接受关于此槽位的查询,但如果键不存在则返回 ASK 重定向
MIGRATING:
- 将槽位标记为正在从当前节点迁移到指定节点
- 当前节点会接受关于此槽位的查询,但如果键不存在则返回 ASK 重定向到目标节点
STABLE:
- 清除槽位的 IMPORTING 或 MIGRATING 状态
- 将槽位恢复为正常状态
NODE:
- 将槽位的所有权分配给指定节点
- 通常在迁移完成后使用
*示例
# 将槽位 1000 标记为从节点 A 迁移到节点 B
# 在节点 A 上执行
redis-cli -h node-a CLUSTER SETSLOT 1000 MIGRATING <node-b-id>
# 在节点 B 上执行
redis-cli -h node-b CLUSTER SETSLOT 1000 IMPORTING <node-a-id>
# 迁移槽位中的键
keys=$(redis-cli -h node-a CLUSTER GETKEYSINSLOT 1000 100)
for key in $keys; do
redis-cli -h node-a MIGRATE node-b-ip 6379 "$key" 0 5000
done
# 确认迁移完成后,将槽位分配给节点 B
redis-cli -h node-b CLUSTER SETSLOT 1000 NODE <node-b-id>
# 如果在迁移过程中需要取消
redis-cli -h node-a CLUSTER SETSLOT 1000 STABLE
redis-cli -h node-b CLUSTER SETSLOT 1000 STABLE
*返回值
- OK:命令执行成功
- 错误:如果槽位状态转换无效
*版本兼容性
| 版本 | 说明 |
|---|---|
| >= 3.0.0 | 可用 |
*时间复杂度
O(1)