【问题标题】:Redis, will a topic (pub/sub) always be delivered to at least one subscriber?Redis,一个主题(发布/订阅)是否总是至少交付给一个订阅者?
【发布时间】:2020-08-28 19:29:45
【问题描述】:

例如,如果发生 key/val 的过期事件并且发送了一个主题但所有客户端都关闭了,那么即使在一年后 一个 客户端上线并且订阅该主题?

如果两个客户在同一时间稍后上线怎么办?

如果 两个 客户在线但他们之间存在巨大延迟怎么办?

主题稍后广播,但我注意到,如果我关闭并重新连接,我可以在我重新上线时收到主题。

当我重新启动时,尽管它是“新客户”,但我并没有得到旧的。

发生了什么事?这东西的内部规则是什么?

【问题讨论】:

标签: redis publish-subscribe


【解决方案1】:

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

前三个问题的答案是否定的。消息没有持久性,不在磁盘中,也不在内存中。当消息发布时,它会被发送到当前订阅的客户端连接。 PUBLISH 命令将立即返回收到消息的客户端数量:O(N+M) 其中 N 是订阅接收通道的客户端数量,M 是订阅模式的总数(任何客户端) .

...但我注意到,如果我关闭并重新连接,我可以在我重新上线时获得主题

R/ 我想这取决于你所说的“I am down”是什么意思。消息必须在您的客户端某处缓存。或者 Redis 服务器中的客户端连接仍然存在,并且消息在客户端输出缓冲区中。

您可能会发现这些资源很有用:

What are the main differences between Redis Pub/Sub and Redis Stream?

Pub/Sub

【讨论】:

  • 关于后一点,没有。我从一个java程序运行它。我把它关了。绝对下来。我什至等了几分钟才重新连接。 Redis 仍在其他机器上运行。当我开始一个全新的程序时,不知何故我能够得到我应该错过的消息(地图插入的到期事件)。它可能与 Redisson 有关,但我还是决定不信任此功能。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-09-26
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 2015-06-30
相关资源
最近更新 更多