【发布时间】:2016-04-16 17:57:31
【问题描述】:
Redis 提供 BRPOP,允许发送方/接收方模型保证交付。
发件人: LPUSH foo_key bar_value
收件人: BRPOP foo_key ### => 'bar_value'
其中 ### 是任意过期间隔,例如 15 秒。
但是,如果消息有两个接收者,您应该怎么做?我考虑过以下选项:
- PUBLISH/SUBSCRIBE,但是如果发送者 PUBLISHes 在接收者 SUBSCRIBE 之前发送消息,这会导致竞争条件转到频道。
- 发送者在一个键上调用SET+EXPIRE,接收者轮询这个键直到一个值出现,然后GET得到这个值。数据最终会根据 EXPIRE 超时被删除。我不喜欢这个选项,因为如果多个客户端同时轮询 Redis 可能会导致性能不佳,而且响应不是实时的。
您如何设置具有实时、保证交付的多客户端接收器模型?
只有一条消息会通过我的架构中的特定键发送,因此客户端不会有意外收到两次相同消息的危险。
【问题讨论】: