Redis的发布订阅功能是否会保存频道中的历史消息?

21

我在文档中没有找到有关频道消息在Redis发布/订阅中如何存储的信息。

当您发布到Redis频道时,该消息是否存储或持久化? 如果是这样,它会被存储多长时间,并且如何获取历史消息?

否则,我认为它只是广播该消息,然后在广播后删除/丢弃该消息?


1
实际上,https://redislabs.com/redis-best-practices/communication-patterns/pub-sub/清楚地指出:“这些消息是即发即忘的,如果发布了一条消息并且没有订阅者存在,则该消息会消失并且无法恢复。” - Qiulang
2个回答

35

发布/订阅消息不会排队,更不会持久化。

它们只在套接字缓冲区中缓存,并在发布时的同一事件循环迭代中立即发送给订阅者。

如果订阅者未能读取消息,则该消息对订阅者而言将丢失。


1
有任何想法如何保存这些信息吗?我正在尝试实现类似聊天的功能。 - Rahul Dess
3
可以使用列表来存储它们。 使用LPUSH将项目存储,LPOP或BLPOP将其出队。 您必须自己实现发布/订阅行为。 - Didier Spezia
哦,好的..谢谢 :) - Rahul Dess
2
@RahulDess 现在你可以使用Redis Keyspace Notifications - InQβ
@DidierSpezia 如果是这样,为什么我在pubsub客户端中看到高输出缓冲区大小? - Michael

2
你可以使用自发布 5.0 版本以来就提供的 Redis Streams 进行游戏。 它们支持持久性并且可以满足你的需求。 更多详细信息,你可以从比较这些类似但不同数据类型的 文章 中找到。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接