每种方法的优缺点是什么? 请指导何时使用其中一种而不是另一种。
每种方法的优缺点是什么? 请指导何时使用其中一种而不是另一种。
Pub/Sub是一个发布/订阅平台,不是数据存储。发布的消息会消失,无论是否有订阅者。
在Redis Streams中,流是一种数据类型,是一种独立的数据结构。消息或条目存储在内存中,并保留直到被命令删除。
Pub/Sub是同步通信(推送协议)。所有参与方需要同时活跃才能进行通信。在这里,Redis是一个纯同步的消息代理。
Redis Streams允许同步(使用XREAD
和BLOCK
以及特殊的$
ID是推送协议)和异步通信(常规XREAD
是拉取协议)。XREAD
与BLOCK
类似于Pub/Sub,但具有在断开连接时恢复而不丢失消息的能力。
Pub/Sub是最多一次,即“发送并忘记”。
Redis Streams允许最多一次或至少一次(接收方发送显式确认)。
Pub/Sub仅支持阻塞模式。一旦订阅了频道,客户端就会进入订阅者模式,无法发出命令(除了[P]SUBSCRIBE
、[P]UNSUBSCRIBE
、PING
和QUIT
),它已经变成只读模式。
Redis Streams允许消费者以阻塞模式或非阻塞模式读取消息。
发布/订阅只能进行扇出操作,所有活跃客户端都会接收到所有消息。
Redis Streams允许进行扇出操作(使用XREAD
),也可以将同一流的不同子集提供给多个客户端。这样可以通过将不同的消息路由到不同的工作进程来缩放消息处理,而不可能将同一消息传递给多个消费者。通过消费者组实现了最后一个场景。
Redis Streams提供了许多其他功能,如时间戳、字段-值对、范围等。但这并不意味着您应该总是选择Streams。如果您的用例可以使用发布/订阅来实现,则最好使用发布/订阅。在使用Streams时,您需要关注内存使用情况。