*Redis PUBSUB NUMSUB 命令
PUBSUB NUMSUB 是 PUBSUB 命令的子命令,用于返回指定频道的订阅者数量。
*语法
PUBSUB NUMSUB [channel [channel ...]]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| channel | String | 否 | 要查询的频道名称,可指定多个 |
*返回值
- Array:频道名称和订阅者数量交替组成的数组
- 格式:[channel1, count1, channel2, count2, ...]
- 如果频道不存在或没有订阅者,返回 count 为 0
*时间复杂度
O(N),其中 N 为请求的频道数量
*示例
*查询单个频道的订阅者数量
> PUBSUB NUMSUB news
1) "news"
2) (integer) 3
*查询多个频道
> PUBSUB NUMSUB news chat notifications
1) "news"
2) (integer) 3
3) "chat"
4) (integer) 1
5) "notifications"
6) (integer) 0
*无参数查询
> PUBSUB NUMSUB
(empty array)
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| 返回 count 为 0 | 频道没有订阅者 | 这是正常状态,确认频道名称是否正确 |
*最佳实践
- 使用 PUBSUB NUMSUB 监控关键频道的订阅情况,评估消息投递范围
- 发布消息前可检查目标频道的订阅者数量,避免无意义的发布
- 配合 PUBSUB CHANNELS 获取活跃频道列表,再用 NUMSUB 获取详细数据
- 可用于监控系统的实时连接数和活跃度
*FAQ
Q1: PUBSUB NUMSUB 返回的订阅者数量包含模式订阅吗? A: 不包含,只统计通过 SUBSCRIBE 直接订阅的客户端。模式订阅的数量需要使用 PUBSUB NUMPAT。
Q2: 查询不存在的频道会报错吗? A: 不会,返回该频道的订阅者数量为 0。
Q3: 可以查询多少个频道? A: 没有硬性限制,但查询频道过多会增加命令执行时间,建议分批查询。