• 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);
    
            }

    让我做你的眼睛 

    说那样你才看的清 

    !!!

  • 相关阅读:
    cvCreateStructuringElementEx理解
    GNU_GSL相关
    粒子滤波(转)
    C++指针拷贝
    c++中的复制构造函数
    通过几道题目找自信
    C++网络编程基础
    linux system : install flash player
    ContentType一览
    O_RDWR O_CREAT等open函数标志位在哪里定义?(格式还要编译,答案在最后一段)
  • 原文地址:https://www.cnblogs.com/wlphp/p/11632806.html
Copyright © 2020-2023  润新知