我不确定我是否理解使用redis pub / sub和使用node / express'事件发射器之间的区别。 pub / sub是否以任何方式与我的数据库交互?在什么情况下我会使用一个而不是另一个?
答案 0 :(得分:6)
Redis允许您构建快速而强大的进程间通信。 Redis pub / sub使用您的Redis进程来传递消息,但它永远不会影响Redis DB中存储的数据。
事件发射器仅在单节点进程内工作。因此,即使您有一个节点集群,一个工作人员发出的事件也不会被另一个人看到。
因此,事件发射器是进程内通信的最佳选择。但是,如果您需要进程间通信,则应使用Redis。
答案 1 :(得分:2)
如果Redis是您的数据库,则是pub / sub与数据库交互(但不与存储的数据交互),因为正在处理执行发布到订阅频道的Redis。而且我不一定会说你会使用一个而不是另一个。 redis客户端将使用事件发射器向您的节点应用程序发出Redis已发布消息的信号。
要真正回答您的问题,这取决于您使用它们的目的。如果您只在一台服务器上运行一个节点实例,那么事件发射器可能会作为您的消息传递传输。
但是,如果您有多个节点实例或多个服务器上运行的多个实例,则可以扩展事件发射器以将其消息发布到Redis,从而允许在其他服务器上运行的其他节点实例响应该事件。
另一个好用例是socket.io。如果你说一个聊天室使用套接字在房间之间广播,你需要利用Redis pub / sub,如果你的聊天应用程序分布在多个服务器上。