*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