我正在使用Node.js开发一个具有许多实时功能的站点。一个特征是,用户可以在某个频道中发布内容,这将立即推送到观看同一频道的所有人。
我正在努力找出解决这个问题的最佳方法。 MongoDB的数据结构非常符合我的需求,但Redis Pub / Sub功能似乎非常适合这个问题。
所以我想我可能会在MongoDB中存储完整的数据集,只需在Redis中添加一个引用即可将其推送到必要的通道。然后,这些通道的订户客户端可以从MongoDB数据库中读取完整数据。
这是否有意义或我遗失了什么?
谢谢!
答案 0 :(得分:3)
这很有道理。您可以本机或通过socket.io API使用Redis,并将MongoDB用于持久数据。
唯一的问题是要意识到Redis pub / sub不提供任何排队设施。 Redis不会缓冲通知,它们会在同一事件循环迭代中直接从发布者套接字转到订阅者套接字。这很快,但如果订户关闭其连接,则可能会在再次建立连接之前丢失一些项目。交货不受保证。
但是,断开连接后重新连接的用户可以使用MongoDB数据来获取它在必要时丢失的项目。