*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 SLOTSCLUSTER NODES 确认该槽归属。

Q2: 这个命令和 DBSIZE 有什么区别? A: DBSIZE 返回整个数据库的键总数;COUNTKEYSINSLOT 只返回指定哈希槽的键数量,且仅在集群模式下有效。

Q3: 如何遍历所有槽的键数量? A: 可以遍历 0~16383 所有槽执行此命令,但效率低。更推荐的方式是通过 CLUSTER SLOTS 获取当前节点负责的槽范围,然后针对性查询。