*Redis CLUSTER GETKEYSINSLOT 命令

CLUSTER GETKEYSINSLOT 返回指定哈希槽中本地存储的键名列表,用于槽迁移(resharding)时获取待迁移的键。


*语法

CLUSTER GETKEYSINSLOT slot count

*参数说明

参数 类型 必填 说明
slot Integer 哈希槽编号,范围 0 ~ 16383
count Integer 返回的最大键数量,上限为 65 536

*返回值

  • Array:键名数组。最多返回 count 个键。若槽为空或不在当前节点,返回空数组。

*时间复杂度

O(log(N)),其中 N 为请求的键数量。


*示例

*获取指定槽中的键名

> CLUSTER GETKEYSINSLOT 5798 10
1) "user:1000"
2) "user:1001"
3) "order:500"
4) "session:abc123"

*空槽返回空数组

> CLUSTER GETKEYSINSLOT 1234 100
(empty array)

*批量迁移场景

> CLUSTER GETKEYSINSLOT 5798 100
1) "key1"
2) "key2"
...
> MIGRATE 192.168.1.20 6379 "" 0 5000 KEYS key1 key2 ...

*常见错误

错误 原因 解决
ERR Invalid or out of range slot slot 超出 0~16383 范围 确保 slot 在有效范围内
ERR wrong number of arguments 缺少 slot 或 count 参数 补充两个参数
ERR value is not an integer count 不是整数 使用正整数作为 count
ERR This instance has cluster support disabled 未启用集群模式 在 redis.conf 中设置 cluster-enabled yes

*最佳实践

  • 这是槽迁移的核心命令:先用 CLUSTER COUNTKEYSINSLOT 评估总量,再用 GETKEYSINSLOT 分批获取键名,最后用 MIGRATE 命令迁移
  • 每次获取的键数量建议不超过 1000,避免单次迁移阻塞太久
  • 迁移流程:获取键名 → MIGRATE 迁移 → 重复直到槽为空 → 执行 CLUSTER SETSLOT ... NODE 完成槽所有权转移
  • 生产环境建议配合 CLUSTER SETSLOT ... MIGRATINGCLUSTER SETSLOT ... IMPORTING 使用,确保迁移期间客户端请求正确转发

*FAQ

Q1: GETKEYSINSLOT 返回的键顺序是固定的吗? A: 不保证固定顺序。每次调用返回的顺序可能不同,但不影响迁移功能。

Q2: count 参数可以无限大吗? A: 不能。count 的上限为 65 536。若槽中键数超过此上限,需要多次调用。

Q3: 迁移过程中新写入的键会被遗漏吗? A: 有可能。在迁移过程中,如果客户端继续向该槽写入新键,这些新键可能不会被 GETKEYSINSLOT 返回。需要在迁移完成后通过 CLUSTER COUNTKEYSINSLOT 确认槽已清空,并处理可能的遗漏键。