0

我正在使用 Redis 的发布/订阅功能。因此,服务器发布 10 个项目,然后客户端获取这 10 个项目。

但是,现在有一个新客户订阅了该提要。我希望他们得到之前的 10 件物品以及任何新物品。

Redis 是否有办法使用发布和订阅功能来做到这一点?提要历史记录是否存储在数据库中的任何位置?有没有一种简单的方法可以做到这一点?将消息存储在列表中并让客户端在LRANGE my_list 0 10列表中执行的最佳方法是什么?

4

3 回答 3

7

我会保留一个单独的数据存档,并将事件添加到两者中。新客户可以订阅和排队实时事件,阅读存档直到它与第一个发布的事件保持同步,然后赶上发布的事件。这样您就不会在存档和实时事件之间切换时错过任何已发布的事件。

于 2012-09-01T23:47:56.870 回答
2

在一些研究中偶然发现了这一点。我知道它很旧,但我想补充一点,使用 Redis Streams 数据结构实现持久消息传递并不太复杂。

发布者将消息发布到 Stream 并且订阅者将只获得最新消息,如果这是它所关心的。您还可以创建用户组以限制可以获取消息的订阅者数量,然后将其标记为已确认以避免重复处理。当您希望消息只被处理一次并且需要一种方法来确认时,这很好。

于 2019-01-19T19:38:22.140 回答
1

我最终为此目的创建了一个 nodejs 应用程序。就我而言,用户数据已发布到我想要存储的 redis 服务器,我使用 nodejs 应用程序订阅了 redis 频道,然后将详细信息保存到数据库中,到目前为止,我使用了 mysql 和 mongo,让我知道如果这有任何兴趣并且粘贴了一些代码,那么在尝试存储发布历史记录时会有一些相似之处......

干杯

于 2013-01-24T15:14:11.863 回答