redis 实现任务队列

让生产者使用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

猜你喜欢

转载自www.cnblogs.com/lliule/p/9671169.html