*Redis PUBSUB CHANNELS 命令
PUBSUB CHANNELS 是 PUBSUB 命令的子命令,用于返回当前服务器中被订阅的频道列表。
*语法
PUBSUB CHANNELS [pattern]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pattern | String | 否 | 频道匹配模式,仅返回匹配该模式的频道。支持 glob 风格通配符 |
*返回值
- Array:当前至少有一个订阅者的频道名称列表
- 如果未指定 pattern,返回所有有订阅者的频道
- 如果指定了 pattern,返回匹配该模式且有订阅者的频道
*时间复杂度
O(N),其中 N 为服务器中活跃频道的总数
*示例
*查看所有有订阅者的频道
> PUBSUB CHANNELS
1) "news"
2) "chat"
3) "notifications"
*按模式匹配频道
> PUBSUB CHANNELS news.*
1) "news.sports"
2) "news.tech"
3) "news.politics"
*使用通配符匹配
> PUBSUB CHANNELS *
1) "news"
2) "chat"
3) "notifications"
4) "news.sports"
5) "news.tech"
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| 返回空数组 | 没有任何频道被订阅 | 检查是否有客户端执行了 SUBSCRIBE |
| 模式匹配无结果 | 模式语法错误或无匹配的订阅频道 | 验证模式语法,确认有对应订阅 |
*最佳实践
- 使用 PUBSUB CHANNELS 监控系统的活跃频道,及时发现频道泄露
- 配合 PUBSUB NUMSUB 获取每个频道的订阅者数量
- 在调试消息发布问题时,先确认目标频道是否有订阅者
- 生产环境可定期收集频道信息,用于监控和优化
*FAQ
Q1: PUBSUB CHANNELS 会返回模式订阅的频道吗? A: 不会,只返回通过 SUBSCRIBE 直接订阅的频道。PSUBSCRIBE 的模式订阅不会出现在该列表中。
Q2: 返回的频道一定当前有消息吗? A: 不一定,返回的是有订阅者的频道,不代表频道最近有消息发布。
Q3: 无订阅者的频道会出现在列表中吗? A: 不会,PUBSUB CHANNELS 只返回至少有一个订阅者的频道。