zoukankan      html  css  js  c++  java
  • 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);
    
            }

    让我做你的眼睛 

    说那样你才看的清 

    !!!

  • 相关阅读:
    AI ResNet V1
    Lua基础
    git命令小结
    定时器及时间轮
    expect
    vscode 常用快捷键
    动态链接库与共享内存:
    container_of机制
    ELF文件格式
    git学习补充
  • 原文地址:https://www.cnblogs.com/wlphp/p/11632806.html
Copyright © 2011-2022 走看看