*Redis PUBSUB 命令
PUBSUB 查看发布/订阅系统的状态信息,支持多个子命令。
*语法
PUBSUB subcommand [argument ...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| subcommand | String | 是 | 子命令:CHANNELS、NUMSUB、NUMPAT |
| argument | String | 否 | 子命令的参数 |
*子命令说明
| 子命令 | 说明 |
|---|---|
| CHANNELS [pattern] | 返回当前有订阅者的频道列表,支持模式匹配 |
| NUMSUB channel [channel ...] | 返回指定频道的订阅者数量 |
| NUMPAT | 返回当前被模式订阅的数量(PSUBSCRIBE 的数量) |
*返回值
- CHANNELS:Array,匹配的频道名称列表
- NUMSUB:Array,频道名称和订阅者数量交替排列
- NUMPAT:Integer,模式订阅数量
*时间复杂度
- CHANNELS:O(N),N 为活跃频道数量
- NUMSUB:O(N),N 为请求的频道数量
- NUMPAT:O(1) ---
*示例
*查看活跃频道
> PUBSUB CHANNELS
1) "news"
2) "chat:room1"
> PUBSUB CHANNELS news.*
1) "news.sports"
2) "news.tech"
*查看频道订阅者数量
> PUBSUB NUMSUB news chat:room1 notexist
1) "news"
2) (integer) 5
3) "chat:room1"
4) (integer) 3
5) "notexist"
6) (integer) 0
*查看模式订阅数量
> PUBSUB NUMPAT
(integer) 12
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 缺少 subcommand | 提供有效的子命令 |
| ERR unknown subcommand | 子命令不存在 | 使用 CHANNELS、NUMSUB 或 NUMPAT |
*最佳实践
- 监控和管理发布/订阅系统的核心工具,常用于查看系统状态
- 使用 PUBSUB CHANNELS 检查活跃的频道,避免发布到无人订阅的频道
- NUMSUB 可用于负载均衡决策,将消息发送到订阅者较少的频道
- NUMPAT 可用于监控模式订阅的使用情况,避免过度使用模式订阅影响性能
*FAQ
Q1: PUBSUB CHANNELS 返回所有频道吗? A: 只返回当前有至少一个订阅者的频道。无订阅者的频道不会出现在列表中,即使之前有消息发布过。
Q2: NUMSUB 返回的是所有客户端数量吗? A: 返回的是普通订阅(SUBSCRIBE)该频道的客户端数量,不包括模式订阅(PSUBSCRIBE)的客户端。
Q3: PUBSUB 命令在集群模式下有什么限制? A: 在 Redis Cluster 中,PUBSUB 命令只能查看当前节点上的发布/订阅状态。集群模式下 Pub/Sub 默认不跨节点传播(需开启 cluster-mode 或专用配置)。