如何在Redis中实施BRPOP?

时间:2016-12-23 03:50:28

标签: redis

我正在尝试了解BRPOP列表如何在Redis中运行。我们使用Redis作为后台工作者的消息队列。一个Web进程LPUSHs到Redis列表和工作人员用BRPOP接收它们。

BRPOP(以及其他列表命令)的“阻塞”方面使我无法理解:在此上下文中阻塞是否意味着Redis保留一个内部的,有序的客户端列表,这些客户端在给定列表上等待BRPOP,并且只发送一个列表项目给一个客户?因此,对于每个pop,单个客户端获取一个列表项,并删除该项。

某些Redis文档似乎在连接级别表示“阻塞”,如果为真,似乎多个客户端无法同时执行给定列表。

1 个答案:

答案 0 :(得分:8)

是的,Redis按照等待特定列表的时间顺序维护客户列表。为了更加清晰,请阅读BLPOP的本文档,其实现方式与BRPOP相同。

“如果为同一个密钥阻止多个客户端,则要服务的第一个客户端是等待更多时间的客户端(第一个阻止该密钥的客户端)。一旦客户端被解除阻塞,它就不会保留任何优先级,当它再次阻止下一次调用BLPOP时,它将相应地服务于已经为同一个密钥阻止的客户端数量,这些客户端将在它之前被服务(从第一个到最后一个被阻止)。“

详细说明: https://redis.io/commands/blpop