Redis,一个主题(pub/sub)总是会被传递给至少一个订阅者吗?
Redis, will a topic (pub/sub) always be delivered to at least one subscriber?
例如,如果某个键/值发生过期事件,并且发送了一个主题,但所有客户端都已关闭,即使在一年后 one 客户端上线并订阅该主题?
如果 两个 客户端稍后同时上线怎么办?
如果 两个 客户端联机但是他们之间有很大的延迟怎么办?
主题稍后广播,但我注意到,如果我掉线并重新连接,当我重新上线时,我可以收到传送的主题。
当我重新启动时,我没有得到旧的,尽管它是“新客户端”。
这是怎么回事?这东西的内在规则是什么?
Pub/Sub为同步通信。各方需要同时处于活动状态才能进行通信。这里 Redis 是一个纯同步消息代理。
前三个问题的答案是否定的。消息没有持久性,不在磁盘中,不在内存中。发布消息时,它会发送到此时订阅的客户端连接。 PUBLISH 命令将 return 收到消息的客户端数量,立即:O(N+M) 其中 N 是订阅接收通道的客户端数量,M 是订阅的总数模式(任何客户)。
... but I am noticing that if I am down and reconnect I can get the topics delivered when I go back online
R/ 我想这取决于你所说的“我情绪低落”是什么意思。该消息必须已 缓存 在您客户端的某处。或者也许 Redis 服务器中的客户端连接仍然存在并且消息在客户端输出缓冲区中。
您可能会发现此资源有用:
例如,如果某个键/值发生过期事件,并且发送了一个主题,但所有客户端都已关闭,即使在一年后 one 客户端上线并订阅该主题?
如果 两个 客户端稍后同时上线怎么办?
如果 两个 客户端联机但是他们之间有很大的延迟怎么办?
主题稍后广播,但我注意到,如果我掉线并重新连接,当我重新上线时,我可以收到传送的主题。
当我重新启动时,我没有得到旧的,尽管它是“新客户端”。
这是怎么回事?这东西的内在规则是什么?
Pub/Sub为同步通信。各方需要同时处于活动状态才能进行通信。这里 Redis 是一个纯同步消息代理。
前三个问题的答案是否定的。消息没有持久性,不在磁盘中,不在内存中。发布消息时,它会发送到此时订阅的客户端连接。 PUBLISH 命令将 return 收到消息的客户端数量,立即:O(N+M) 其中 N 是订阅接收通道的客户端数量,M 是订阅的总数模式(任何客户)。
... but I am noticing that if I am down and reconnect I can get the topics delivered when I go back online
R/ 我想这取决于你所说的“我情绪低落”是什么意思。该消息必须已 缓存 在您客户端的某处。或者也许 Redis 服务器中的客户端连接仍然存在并且消息在客户端输出缓冲区中。
您可能会发现此资源有用: