我目前有兴趣查看我拥有的 Redis 发布/订阅应用程序中订阅了哪些频道。当客户端连接到我们的服务器时,我们将它们注册到如下所示的通道:
user:user_id
这样做的原因是我希望能够看到谁“在线”。目前,我在不知道客户端是否在线的情况下盲目地向频道发送消息,因为他们接收这些类型的消息并不重要。
为了让我的应用程序更加智能,我希望能够发现客户端是否在线或不使用 pub/sub API,如果它们离线,则将其消息缓存到一个单独的 Redis 队列中,我可以将其推送当他们重新上线时向他们发送。
这不一定是 100% 准确,但越准确越好。我假设订阅频道时不会创建通用密钥,所以我不能做一些简单的事情:
redis-cli keys user*
查找所有在线用户。
我想到的另一个策略是每当用户发布或从频道中删除自己时维护我自己的 Redis 集(客户端在在线并关闭应用程序时自动处理)。这将是我需要管理的额外的复杂性,我希望有一种更简单的方法来处理现有的数据。
从 Redis 2.8 开始,您可以执行以下操作:
PUBSUB CHANNELS [pattern]
The PUBSUB CHANNELS command http://redis.io/commands/pubsub复杂度为 O(N),其中 N 是活动通道的数量。
所以在你的情况下:
redis-cli PUBSUB CHANNELS user*
会给你想要的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)