*Redis PUBSUB SHARDCHANNELS 命令
返回当前活跃的 shard 频道列表(Redis 7.0+ 分片发布订阅)。
*语法
PUBSUB SHARDCHANNELS [pattern]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pattern | String | 否 | 匹配模式,支持 * 和 ? 通配符;不提供则返回所有活跃 shard 频道 |
*返回值
| 条件 | 返回值 |
|---|---|
| 有活跃频道 | 字符串数组,列出匹配的活跃 shard 频道名 |
| 无活跃频道 | 空数组 [] |
*时间复杂度
O(N),N 为活跃 shard 频道数量
*示例
*返回所有活跃 shard 频道
> PUBSUB SHARDCHANNELS
1) "news:sports"
2) "news:tech"
*按模式匹配
> PUBSUB SHARDCHANNELS news:*
1) "news:sports"
2) "news:tech"
> PUBSUB SHARDCHANNELS weather:*
(empty array)
*检查特定频道是否活跃
> PUBSUB SHARDCHANNELS *sports*
1) "news:sports"
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 参数数量错误 | 最多接受 1 个 pattern 参数 |
*最佳实践
- 场景:监控分片发布订阅系统的活跃频道,排查订阅异常
- 与 PUBSUB SHARDNUMSUB 配合使用,获取频道及订阅者数量
- 仅在 Redis Cluster 模式下使用 shard pub/sub 功能
- pattern 使用
*匹配所有频道,不使用 pattern 参数行为相同
*FAQ
Q1: PUBSUB SHARDCHANNELS 和 PUBSUB CHANNELS 有什么区别? A: PUBSUB CHANNELS 返回全局 pub/sub 的活跃频道;PUBSUB SHARDCHANNELS 返回分片 pub/sub(shard pub/sub,Redis 7.0+)的活跃频道。分片 pub/sub 只在 Redis Cluster 中有效,消息仅在同一个 slot 的节点间传播。
Q2: 没有订阅者后频道还会出现在列表中吗? A: 不会。只有至少有一个活跃订阅者的频道才会被列出。
Q3: 可以在非 Cluster 模式下使用吗? A: 可以执行,但分片 pub/sub 主要设计用于 Redis Cluster。单机模式下结果通常为空或仅包含本地订阅。