*Redis CLUSTER SLOT-STATS 命令
CLUSTER SLOT-STATS 返回集群各槽位的统计信息,包括 key 数量、内存使用等。
*语法
CLUSTER SLOT-STATS [slots-start slots-end [SLOTS start end]]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| slots-start | Integer | 否 | 槽位范围起始编号(0-16383) |
| slots-end | Integer | 否 | 槽位范围结束编号(0-16383) |
*选项
| 选项 | 说明 |
|---|---|
| SLOTS start end | 指定要查询的槽位子范围 |
*返回值
- Array:槽位统计信息数组,每个元素包含:
- 槽位编号(Integer)
- key 数量(Integer)
- 内存使用量(Integer,字节数)
- Error:参数无效或集群模式未启用
*时间复杂度
O(N),N 为查询的槽位数量。
*示例
*查看所有槽位统计
> CLUSTER SLOT-STATS
1) 1) (integer) 0
2) (integer) 150
3) (integer) 1024000
2) 1) (integer) 1
2) (integer) 200
3) (integer) 1536000
...
16384) 1) (integer) 16383
2) (integer) 50
3) (integer) 512000
*查看指定槽位范围
> CLUSTER SLOT-STATS 0 100
1) 1) (integer) 0
2) (integer) 150
3) (integer) 1024000
2) 1) (integer) 1
2) (integer) 200
3) (integer) 1536000
...
101) 1) (integer) 100
2) (integer) 180
3) (integer) 921600
*查看热点槽位
> CLUSTER SLOT-STATS | grep -E '^[0-9]+) .*[0-9]{7,}$'
# 筛选 key 数量或内存异常高的槽位
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR Invalid slot range | 槽位范围不合法 | 确保在 0-16383 范围内 |
| ERR end slot is smaller than start slot | 结束小于起始 | 调整参数顺序 |
| ERR This instance has cluster support disabled | 未启用集群模式 | 开启 cluster-enabled yes |
| ERR CLUSTER SLOT-STATS not supported in this version | Redis 版本不支持 | 升级到 Redis 7.4+ |
*最佳实践
- 用于分析集群槽位的负载均衡情况
- 热点槽位(key 数量或内存远高于平均值)可能导致节点负载不均
- 建议定期运行 CLUSTER SLOT-STATS 监控数据分布
- 发现不平衡时,可通过 CLUSTER SETSLOT 和 MIGRATE 重新分配槽位
- 结合 CLUSTER COUNTKEYSINSLOT 做更细粒度的分析
*FAQ
Q1: CLUSTER SLOT-STATS 和 CLUSTER SLOTS 有什么区别? A: CLUSTER SLOTS 返回槽位到节点的映射关系;CLUSTER SLOT-STATS 返回槽位的数据统计(key 数、内存)。
Q2: 内存使用量是如何计算的? A: 统计槽位中所有 key 及其 value 的内存占用,不包括 Redis 内部管理开销。
Q3: 空槽位会返回吗? A: 会返回,key 数量和内存均为 0。
Q4: Redis 哪个版本开始支持 CLUSTER SLOT-STATS? A: Redis 7.4.0 新增此命令。