*Redis PUBSUB SHARDNUMSUB 命令
返回指定 shard 频道的订阅者数量(Redis 7.0+ 分片发布订阅)。
*语法
PUBSUB SHARDNUMSUB [channel [channel ...]]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| channel | String | 否 | 要查询的 shard 频道名;可指定多个,不提供则返回空数组 |
*返回值
| 条件 | 返回值 |
|---|---|
| 指定频道 | 数组,格式为 [channel1, count1, channel2, count2, ...] |
| 频道不存在或无订阅者 | 对应 count 为 0 |
*时间复杂度
O(N),N 为请求的频道数量
*示例
*查询单个 shard 频道
> PUBSUB SHARDNUMSUB news:sports
1) "news:sports"
2) (integer) 3
*查询多个 shard 频道
> PUBSUB SHARDNUMSUB news:sports news:tech weather:local
1) "news:sports"
2) (integer) 3
3) "news:tech"
4) (integer) 5
5) "weather:local"
6) (integer) 0
*无参数调用
> PUBSUB SHARDNUMSUB
(empty array)
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| 参数类型错误 | 频道名不是字符串 | 确保频道名为有效字符串 |
*最佳实践
- 场景:监控分片 pub/sub 系统的负载,统计各频道订阅者数量
- 与 PUBSUB SHARDCHANNELS 配合,先获取活跃频道再查订阅数
- 订阅者数量可用于决定是否向某频道发布消息(客户端侧优化)
- 仅在 Redis Cluster 模式下有效,用于 shard pub/sub
*FAQ
Q1: PUBSUB SHARDNUMSUB 和 PUBSUB NUMSUB 有什么区别? A: PUBSUB NUMSUB 查询全局 pub/sub 频道的订阅者数量;PUBSUB SHARDNUMSUB 查询分片 pub/sub(shard pub/sub)频道的订阅者数量。分片 pub/sub 是 Redis 7.0 引入的,仅在 Cluster 模式下有效。
Q2: 返回的计数包括所有集群节点吗? A: SHARDNUMSUB 返回当前节点本地 shard 频道的订阅者数量。由于 shard pub/sub 消息只在同一 slot 内传播,各节点的订阅者数量可能不同。
Q3: 查询不存在的频道会报错吗?
A: 不会报错,会返回对应频道名和计数 0。