【问题标题】:"Archiving" publish/subscribe message in RedisRedis 中的“归档”发布/订阅消息
【发布时间】:2012-09-01 06:30:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: redis node-redis


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        干杯

        【讨论】:

          最近更新 更多