我试图理解BRPOP列表如何在Redis中运行.我们使用Redis作为后台工作者的消息队列.一个Web进程LPUSHs到Redis列表和工作人员用BRPOP接收它们.
BRPOP(以及其他列表命令)的"阻塞"方面使我无法理解:在此上下文中阻塞意味着Redis保留一个内部的,有序的客户端列表,这些客户端在BRPOP的给定列表上等待,并且只向一个列表项发送一个客户?所以对于每个pop,单个客户端获取一个列表项,并删除该项.
一些Redis文档似乎在连接级别表示"阻塞",如果为真,似乎多个客户端不能同时对某个给定列表进行brpop.
小智 9
是的,Redis按照他们等待特定列表的时间顺序维护一个客户列表.为了更加清晰,请阅读BLPOP的本文档,其实现方式与BRPOP相同.
"如果多个客户端被阻止使用相同的密钥,则要服务的第一个客户端是等待更长时间的客户端(第一个阻止该密钥的客户端).一旦客户端被解除阻止,它就不会保留任何优先级,当它再次阻止下一次调用BLPOP,它将相应地服务于已经为同一个密钥阻止的客户端数量,这些客户端将在它之前被服务(从第一个到最后一个被阻止)."
有关详细文档:https: //redis.io/commands/blpop