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