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

问题描述 投票:0回答:1

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

database caching redis publish-subscribe valkey
1个回答
107
投票

数据存储

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

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

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

Pub/Sub 是同步通信(push 协议)。各方需要同时活跃才能进行沟通。这里Redis/Valkey是一个纯粹的同步消息代理。

流允许同步(带有

XREAD
BLOCK
和特殊的
$
ID 是 push 协议)和异步通信(常规
XREAD
pull 协议)。
XREAD
BLOCK
就像 Pub/Sub,但能够在断开连接时恢复而不会丢失消息。

传递语义

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

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

消费者封锁模式

Pub/Sub 仅适用于阻塞模式。订阅频道后,客户端将进入订阅者模式,并且无法发出命令(

[P]SUBSCRIBE
[P]UNSUBSCRIBE
PING
QUIT
除外),它已变为只读。

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

扇出

Pub/Sub 仅适用于扇出。所有活跃客户都会收到所有消息。

Streams 允许扇出(使用

XREAD
),而且还可以从同一流向许多客户端提供不同的消息子集。这允许通过将不同的消息路由到不同的工作人员来扩展消息处理,以某种方式将相同的消息传递给多个消费者。最后一个场景是通过消费者群体实现的。


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

https://valkey.io/topics/pubsub/ https://valkey.io/topics/streams-intro/

© www.soinside.com 2019 - 2024. All rights reserved.