thinkphp 实现redis简单的消息队列

2021-01-14 16:51 ThinkPHP 65 梁俊威

这篇文章简单的讲解并实现Redis消息队列的入列和出列。

1、入列,我们把入列比作是生产厂家,厂家只管尽情的成产即可,你不需要考虑其他(除特殊场景秒杀、抢购场景等)。

//入列,生产厂家
public function into(){
    $redis  = new Redis();
    //业务场景不在此过多阐述
    for ( $i = 1 ; $i <= 10 ; $i++ ){
        $user = array('id'=>$i,'username'=>'user'.$i);
        $redis->lPush('data',json_encode($user));
    }
}

2、查看队列中的所有数据

//查看队列所有数据
public function data(){
    $redis  = new Redis();
    dump($redis->lRange('data',0,-1));
}

结果如下:

array(10) {
    [0] => string(34) "{"id":10,"username":"user10"}"
    [1] => string(32) "{"id":9,"username":"user9"}"
    [2] => string(32) "{"id":8,"username":"user8"}"
    [3] => string(32) "{"id":7,"username":"user7"}"
    [4] => string(32) "{"id":6,"username":"user6"}"
    [5] => string(32) "{"id":5,"username":"user5"}"
    [6] => string(32) "{"id":4,"username":"user4"}"
    [7] => string(32) "{"id":3,"username":"user3"}"
    [8] => string(32) "{"id":2,"username":"user2"}"
    [9] => string(32) "{"id":1,"username":"user1"}"
}

3、出列,我们可以将出列看作为消费者,同样,尽管尽情的消费即可,只要队列有数据就进行消费,勤勤恳恳的工作。不用考虑什么时候有数据不用考虑多少数据,只要有数据就干掉他。

//消费者
public function out(){
    $redis  = new Redis();
    //获取队列长度
    $count  = $redis->handler()->llen('data');
    for ( $i=0; $i < $count; $i++){
        //拿出队列中第一个json信息
        $user = $redis->lIndex('data',0);
        //解析成数组
        $user_info = json_decode($user,true);
        //此处进行业务处理。
        echo "<br /> ".$user_info['username']."出队列成功  <br />";
        //处理成功,将此信息移除队列。
        $redis->lPop('data');
    }
}

结果如下:

demo10出队列成功

demo9出队列成功

demo8出队列成功

demo7出队列成功

demo6出队列成功

demo5出队列成功

demo4出队列成功

demo3出队列成功

demo2出队列成功

demo1出队列成功


若无特殊说明,本站点所有内容均为原创,转载请说明出处!

原文链接:https://www.codelearn.cn/read/95.html 点击复制