Redis5实现任务队列

原理:使用redis 的集合类型(list) 生产者添加一个元素lpush,消费者不停得取lpop

 

 但是消费者不停的进行取,即使在list为空的时候,这不禁造成了资源浪费...

BRPOP和BLPOP 命令应运而生,BLPOP,BRPOP的区别在与从队列取元素时BLPOP会从队列左边取

BRPOP命令接收两个参数,第一个是键名,第二个是超时时间,单位是秒。
当超过了此时间仍然没有获得新元素的话就会返回nil。
超时时间为0,表示不限制等待的时间,即如果没有新元素加入列表就会永远阻塞下去
127.0.0.1:6379> brpop postsTemp 0
1) "postsTemp"
2) "post:5"
127.0.0.1:6379> brpop postsTemp 0

队列优先级

如果队列中有1小时才能执行完的站内消息推送,在这后面有个注册发送邮件的队列

 

blpop registerList sendMsg

  blpop支持多个参数,这就是按照顺序来弹出,实现了优先级

PHP代码

消费者(每5秒取一次)

 $taskKeys=["taskSendMsg","taskRegister"];
        while (true){

           $info=Redis::brpop($taskKeys,5);
            dump($info);
        }

生产者

  while (true){

            Redis::lpush("taskSendMsg","user1");
            Redis::lpush("taskRegister","user2");

            sleep(1);

        }

让我做你的眼睛 

说那样你才看的清 

!!!

原文地址:https://www.cnblogs.com/wlphp/p/11632806.html