为什么我不能有一个Redis客户端在同一个连接中充当PUB和Sub?

我的心智模式是“聊天”,我订阅了某个频道,我可以发布消息到这个频道。

由于发布/订阅是asynchronous的,因此发布的消息可能随时出现,包括当您期待对命令的响应时。

尽piperedis是单线程的,通常会阻止这种事情发生,networking延迟可能会引起一些有趣的效果 – 取决于消息的内容,在服务器实际收到消息之前,您可以收到对命令的有效响应。

也就是说,如果你真的想要 – “不应该”和“不可以”不一样,那么你可以使用单一连接,并且redis遵循一个简单的devise理念,不要试图阻止你在脚下自我射击。 但是,打开服务器的两个连接要容易得多。 如果每个客户端连接两个连接,您可能会很快遇到每个客户端连接一个连接的问题。

当客户端发出SUBSCRIBE或PSUBSCRIBE时,该连接将被置于“pub / sub”模式。 此时,只有修改订阅集的命令才有效。 订阅集为空时,连接将恢复正常模式。

如果您需要在发布/订阅模式下向Redis发送常规命令,只需打开另一个连接。