使用 Redis 的 PUBSUB NUMSUB 命令一键获取所有频道订阅者数量,PUBSUB CHANNELS 获取所有活跃频道。高效管理用户数据:SET user:1 "name:张三,id:123"; SMEMBERS users 获取全部用户列表。网友推荐 Python 代码:
import redis
r = redis.Redis(host='localhost', port=6379)
subs = r.pubsub_numsub('channel1')
print(subs) # [('channel1', 5)]
all_channels = r.pubsub_channels()
print(all_channels)
CSDN 网友分享
Redis一键获取全部订阅者,操作简便实用!
r.pubsub_channels() # 获取所有频道
r.pubsub_numsub('*') # 获取所有频道的订阅者数
超级好用,管理用户订阅数据轻松搞定!
博客园经验帖
高效管理用户数据,用 Redis Hash 存储用户订阅:
HSET user:subs:1001 channel1 1 channel2 1
HGETALL user:subs:1001 # 一键获取用户所有订阅
批量获取:SCAN 0 MATCH user:subs:* 获取全部用户订阅键,然后 HGETALL。
知乎网友推荐
Redis Pub/Sub 监控订阅者:PUBSUB NUMSUB channel1 channel2
一键获取多个频道订阅数,返回列表。网友说:PUBSUB CHANNELS * 列出所有有订阅者的频道,太实用了!结合 SCAN 遍历所有用户键,高效管理。
掘金社区
Python 脚本一键拉取全部订阅者数据:
def get_all_subs(r):
channels = r.pubsub_channels()
for ch in channels:
subs_count = r.pubsub_numsub(ch)[0][1]
print(f'{ch}: {subs_count}')
操作简便,网友亲测高效管理上万用户订阅。
简书教程
用户数据管理神器:用 Sorted Set ZADD users 1 user1 2 user2
ZRANGE users 0 -1 WITHSCORES 一键获取全部用户及分数。订阅者用 SSCAN userset 获取成员,简单实用!
StackOverflow 中文讨论
Redis 获取所有订阅者:没有直接命令,但用 PUBSUB NUMSUB '' 获取全局,或遍历频道。用户数据:KEYS user:* | xargs redis-cli GET 批量获取,网友推荐 pipeline 优化。
FAQ
Q: 如何一键获取单个频道订阅者列表?
A: Redis Pub/Sub 不直接支持获取订阅者列表,只能获取数量,用 PUBSUB NUMSUB channel。
Q: 大量用户数据怎么高效遍历?
A: 用 SCAN 0 MATCH 'user:*' COUNT 100 逐步扫描,避免阻塞。
Q: Python 中怎么监听订阅变化?
A: r.pubsub() 然后 psubscribe('channel*'),实时获取消息。
Q: 订阅者数据持久化吗?
A: Pub/Sub 是内存的,重启丢失,用 List 或 Set 手动记录用户订阅。