我正在使用Redis的发布/订阅功能。因此,服务器发布10个项目,然后客户端获得这10个项目。
然而,现在,新客户订阅了Feed。我希望他们能够获得前10个项目以及任何新项目。
Redis是否有办法使用发布和订阅功能?源记录是否存储在数据库中的任何位置?有这么简单的方法吗?是将邮件存储在列表中并让客户端在列表中执行LRANGE my_list 0 10
的最佳方法吗?
答案 0 :(得分:7)
我会保留一份单独的数据存档,并将事件添加到两者中。新客户可以订阅和排队实时事件,阅读存档,直到它与第一个发布的事件保持同步,然后赶上已发布的事件。这样,在归档和实时事件之间切换时,您不应错过任何已发布的事件。
答案 1 :(得分:1)
我最终为此目的创建了一个nodejs应用程序。在我的情况下,用户数据发布到我想要存储的redis服务器,我使用nodejs应用程序订阅了redis频道,然后将详细信息保存到数据库,到目前为止,我玩过mysql和mongo,让我知道如果这有任何意义并且粘贴了一些代码,那么在尝试存储发布历史时会有一些相似之处......
干杯
答案 2 :(得分:0)
在一些研究中偶然发现了这一点。我知道它很旧,但是我想补充一下,Redis Streams数据结构对实现持久消息传递并不太复杂。
发布者会将消息发布到Stream,而订户只要获得最新消息,就可以获取最新消息。您还可以创建用户组以限制可以获取消息的订阅者数量,然后将其标记为已确认,以避免重复处理。当您只想处理一条消息并需要一种确认方法时,这很好。