【问题标题】:What are the main differences between Redis Pub/Sub and Redis Stream?Redis Pub/Sub 和 Redis Stream 之间的主要区别是什么?
【发布时间】:2019-12-31 06:42:36
【问题描述】:

各有什么优缺点? 请建议何时使用其中一个而不是另一个。

【问题讨论】:

    标签: database caching redis publish-subscribe


    【解决方案1】:

    数据存储

    Pub/Sub 是一个发布者/订阅者平台,它不是数据存储。无论是否有订阅者,已发布的消息都会消失。

    在 Redis Streams 中,流是一种数据类型,它本身就是一种数据结构。消息或条目存储在内存中并一直保留在那里,直到被命令删除。

    同步/异步通信(推/拉)

    Pub/Sub 是同步通信(push 协议)。各方需要同时处于活动状态才能进行通信。这里的 Redis 是一个纯同步消息代理。

    Redis Streams 允许同步(XREADBLOCK 和特殊的 $ ID 是 push 协议)和异步通信(常规 XREADpull 协议)。 XREADBLOCK 类似于 Pub/Sub,但能够在断开连接时恢复而不会丢失消息。

    交付语义

    Pub/Sub 最多一次,即“一劳永逸”。

    Redis Streams 允许最多一次或至少一次(接收方发送的显式确认)

    消费者屏蔽模式

    Pub/Sub 仅是阻塞模式。订阅频道后,客户端进入订阅者模式,无法发出命令([P]SUBSCRIBE[P]UNSUBSCRIBEPINGQUIT 除外),它已变为只读状态。

    Redis Streams 允许消费者在阻塞模式下读取消息。

    扇出

    Pub/Sub 只是扇出。所有活动的客户端都会收到所有消息。

    Redis Streams 允许扇出(使用XREAD),但也可以将来自同一流的不同消息子集提供给许多客户端。这允许扩展消息处理,通过将不同的消息路由到不同的工作人员,以一种不可能将相同的消息传递给多个消费者的方式。最后一个场景是通过消费者群体实现的。


    Redis Streams 提供了更多功能,例如时间戳、字段值对、范围等。这并不意味着您应该始终使用 Streams。如果您的用例可以通过 Pub/Sub 实现,那么您最好使用 Pub/Sub。使用 Streams,您必须注意内存使用情况。

    【讨论】:

    • 优秀的答案!有两个小问题: 1. 由于 Redis 在宕机时可能会丢失数据,所以 Redis Stream 不能保证 at-least-once。 2.客户端订阅频道时,仍然可以发出一些命令,如UNSUBSCRIBE、PING、QUIT...
    • 感谢您最近在这里提供的其他帮助:)
    • @MarcusSmith 这是关于 Redis Pub Sub,而不是关于 Google Pub Sub
    • @LeoMurillo 我很抱歉!我绝对将其视为 Google Pub/Sub。可能是因为当时我的心思在 Google Pub/Sub 上。我将编辑我的评论以反映对 Google Pub/Sub 的替代建议,而不是称您的答案不正确。
    • 也许可以看看 Google Pub/Sub(因为它解决了这里的一些问题)。 1. 即使没有被承认,数据也不会“蒸发”。它确实会在 7 天后过期,这对大容量通信层很有用。 2.Google Pub/Sub 至少一次,并且有 SLA 来确保这一点。 3. Google Pub/Sub 也有过滤功能,所以订阅者不会得到所有东西。归根结底,Redis 不仅仅是一个通信层,它还根据您的需求提供不同的选项,其中 Google Pub/Sub 是一个非常好的通信层,仅此而已。见Google Pub/Sub
    猜你喜欢
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2011-06-23
    • 2015-11-09
    • 2018-08-16
    • 2021-12-29
    相关资源
    最近更新 更多