首页/数据/Redis 进阶速查/CLUSTER GETKEYSINSLOT 取样键名

CLUSTER GETKEYSINSLOT 取样键名

CLUSTER GETKEYSINSLOT slot count 返回该槽内至多 count 个键名,用于抽样验证与迁移脚本分批处理。

Redis 进阶速查数据更新于 2026-10-13

按槽取键名

Redis Cluster 用 16384 个槽做数据归属,运维时经常需要知道「某个槽里到底有哪些键」。CLUSTER GETKEYSINSLOT 按槽返回至多 count 个键名,用于抽样校验、分批迁移与容量估算;它只返回键名,不会返回键值。

基本信息

语法CLUSTER GETKEYSINSLOT <slot> <count>
返回该槽内的键名数组,最多 count 个
版本Redis 3.0 起(集群模式)
执行节点需连到持有该槽的节点,否则只会拿到重定向或空结果

典型使用场景

  • 迁移前抽样看槽内键名规律,确认这批数据属于哪个业务
  • 写迁移脚本时按批取键,再逐个 MIGRATE 到目标节点
  • 配合 CLUSTER COUNTKEYSINSLOT 估算还要循环几轮才能取完
  • 排查热点时按槽取样,观察键名是否有明显倾斜特征
  • 验证 hash tag 是否把同一业务的多个键收敛到同一个槽

取样与迁移流程

取样与迁移流程
# 看槽 1234 内前 10 个键名(只给键名,不含值)
redis-cli -p 7000 CLUSTER GETKEYSINSLOT 1234 10
# 该槽键总数,用来判断循环是否结束
redis-cli -p 7000 CLUSTER COUNTKEYSINSLOT 1234
# 迁移中先把槽标记为迁出,客户端访问会被重定向
redis-cli -p 7000 CLUSTER SETSLOT 1234 MIGRATING <目标节点ID>
# 逐批迁移键,KEYS 语法下键名位置传空字符串
redis-cli -p 7000 MIGRATE 10.0.0.12 7001 "" 0 5000 KEYS user:1 user:2

配套命令读法

项含义注意点
GETKEYSINSLOT返回至多 count 个键名count 必须是正整数
COUNTKEYSINSLOT该槽当前键总数用于估算循环次数
SETSLOT MIGRATING/IMPORTING标记槽正在迁出或迁入迁移前先设置,收尾后清除
SETSLOT NODE把槽正式交给目标节点以这一步作为迁移完成判据
MIGRATE把键搬到目标实例返回 NOKEY 表示键已不在源端
两次调用之间键可能新增或过期,所以「取一批迁一批」要循环到 COUNTKEYSINSLOT 归零,最后用 CLUSTER SETSLOT 收尾,而不是以某一轮取到的键为准。
同一槽内的键名返回顺序不保证稳定,脚本不要依赖顺序做增量处理,用「取一批、处理一批、取到空为止」的循环最稳;返回空数组说明该槽已经没有键。
count 给成几万会让单条命令返回海量键名并长时间占用连接,生产上按几百个一批更稳妥,配合脚本循环处理。

易错点

  • 在未持有该槽的节点上执行 → 拿到空结果或重定向报错 → 先用 CLUSTER KEYSLOT 定位持槽节点再取样
  • 只取一轮就认为迁移完成 → 槽内残留键,收尾时数据不完整 → 循环到计数为 0 再用 SETSLOT NODE 收尾
  • 没先标记 MIGRATING/IMPORTING 就搬数据 → 期间访问被重定向打断,业务报错 → 先标记迁移状态再搬键
  • 涉及多键命令的键没有统一 hash tag → 报 CROSSSLOT 无法执行 → 键名设计上用 {} 把同批键收敛到同槽

数据来源与参考

  • Redis 官方文档:CLUSTER GETKEYSINSLOT 命令
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌