我目前有一个Redis pub/sub应用程序,我想知道订阅了哪些频道。当客户端连接到我们的服务器时,我们会将他们注册到一个看起来像这样的频道:
为了让我的应用程序更加智能,我希望能够使用pub/sub API发现客户端是否在线,如果他们离线了,就将他们的消息缓存到一个单独的redis队列中,当他们重新上线时可以将它们推送给他们。
这不一定要100%准确,但越准确越好。我假设当订阅一个频道时不会创建通用密钥,因此我无法像这样简单地执行操作:
我考虑过的另一种策略就是维护自己的Redis Set,每当一个用户发布或删除自己的频道(当他们在线和关闭应用程序时,客户端会自动处理)时,都要更新Set。这将是我需要管理的额外复杂性层面,我希望有一种更简单的方法利用已有的数据。
user:user_id
之所以这样做是因为我想知道谁“在线”。目前,我不知道客户端是否在线就盲目地向频道发送消息,因为他们接收这些类型的消息并不是必要的。为了让我的应用程序更加智能,我希望能够使用pub/sub API发现客户端是否在线,如果他们离线了,就将他们的消息缓存到一个单独的redis队列中,当他们重新上线时可以将它们推送给他们。
这不一定要100%准确,但越准确越好。我假设当订阅一个频道时不会创建通用密钥,因此我无法像这样简单地执行操作:
redis-cli keys user*
来查找所有在线用户。我考虑过的另一种策略就是维护自己的Redis Set,每当一个用户发布或删除自己的频道(当他们在线和关闭应用程序时,客户端会自动处理)时,都要更新Set。这将是我需要管理的额外复杂性层面,我希望有一种更简单的方法利用已有的数据。
StackExchange.Redis
(.NET
Redis驱动程序)中可用吗? - Bercovici Adrian