*Redis CLUSTER COUNTKEYSINSLOT 命令
CLUSTER COUNTKEYSINSLOT 返回指定哈希槽(hash slot)中本地存储的键数量。
*语法
CLUSTER COUNTKEYSINSLOT slot
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| slot | Integer | 是 | 哈希槽编号,范围 0 ~ 16383 |
*返回值
- Integer:指定槽中本地存储的键数量。若该槽不在当前节点,返回 0。
*时间复杂度
O(1)
*
*示例
*查询指定槽中的键数量
> CLUSTER COUNTKEYSINSLOT 5798
(integer) 50
*空槽或不在当前节点的槽
> CLUSTER COUNTKEYSINSLOT 1234
(integer) 0
*获取最大槽号的键数量
> CLUSTER COUNTKEYSINSLOT 16383
(integer) 12
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR Invalid or out of range slot | slot 超出 0~16383 范围 | 确保 slot 在有效范围内 |
| ERR wrong number of arguments | 未提供 slot 参数 | 补充槽编号 |
| ERR This instance has cluster support disabled | 未启用集群模式 | 在 redis.conf 中设置 cluster-enabled yes |
*最佳实践
- 在槽迁移(resharding)前使用此命令评估数据量,合理规划迁移批次
- 配合 CLUSTER GETKEYSINSLOT 一起使用:先用 COUNTKEYSINSLOT 获取数量,再用 GETKEYSINSLOT 获取具体键名进行迁移
- 迁移过程中可定期执行此命令监控剩余未迁移的键数量
- 注意:该命令仅统计当前节点上属于该槽的键,若槽已迁移到其他节点,返回 0
*FAQ
Q1: 返回 0 一定代表该槽没有键吗? A: 不一定。返回 0 可能是因为该槽不在当前节点上,或者该槽确实没有键。可通过 CLUSTER SLOTS 或 CLUSTER NODES 确认该槽归属。
Q2: 这个命令和 DBSIZE 有什么区别? A: DBSIZE 返回整个数据库的键总数;COUNTKEYSINSLOT 只返回指定哈希槽的键数量,且仅在集群模式下有效。
Q3: 如何遍历所有槽的键数量? A: 可以遍历 0~16383 所有槽执行此命令,但效率低。更推荐的方式是通过 CLUSTER SLOTS 获取当前节点负责的槽范围,然后针对性查询。