Redis Pub/Sub 和 Redis Stream 之间的主要区别是什么?

And*_*ndo 23 database caching publish-subscribe redis

各自的优缺点是什么?请建议何时使用一种而不是另一种。

Leo*_*llo 41

数据存储

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

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

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

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

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

传递语义

Pub/Sub 是最多一次,即“即发即忘”。

Redis Streams 允许 At-most-once 或 At-least-once(接收者发送的显式确认)

消费者的阻塞模式

Pub/Sub 仅是阻塞模式。一旦订阅了通道,所述客户端被放入订户模式,并且不能发出命令(除[P]SUBSCRIBE[P]UNSUBSCRIBEPINGQUIT),它已成为只读的。

Redis Streams 允许消费者以阻塞模式或不以阻塞模式读取消息。

扇出

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

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


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

  • 感谢您提供的这一点以及您最近在这里提供的其他帮助:) (3认同)