让生产者使用lpush 命令加入到某个键中,另一个消费者不断使用rpop从该键中取出任务;伪代码:
loop
$task = RPOP queue
if $task
execute($task) # 有就执行
else
wait 1 second ## 等待1 秒
可以使用BRPOP命令来优化上面的代码。
BRPOP 和 RPOP 相似,区别是当列表中没有元素的时候, BRPOP 会一直阻塞住连接,直到有新元素加入
loop
$task = BRPOP queue ,0
execute($task)
BRPOP 接受2个参数,第一个是键名,第二个是超时时间,单位是秒。当超过时间仍没有新元素就返回nil;0表示不限制等待时间,没有新元素就一直阻塞。
redis A > BRPOP queue 0
redis B > LPUSH queue task