thinkphp 实现redis简单的消息队列

thinkphp 实现redis简单的消息队列

本章简单的实现。消息队列的入列和出列
1.入列,入列作为生产者,只管尽情的成产即可,无需考虑其他 (秒杀、抢购场景除外)。

此次我们假如有十个用户进入队列。

 //入列,生产者
public function into()
{
    $redis  = new Redis();
    //业务场景不在此阐述
    for ( $i = 1 ; $i <= 10 ; $i++ ){
        $user = array('user_id'=>$i,'username'=>'demo'.$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) "{"user_id":10,"username":"demo10"}"
  [1] => string(32) "{"user_id":9,"username":"demo9"}"
  [2] => string(32) "{"user_id":8,"username":"demo8"}"
  [3] => string(32) "{"user_id":7,"username":"demo7"}"
  [4] => string(32) "{"user_id":6,"username":"demo6"}"
  [5] => string(32) "{"user_id":5,"username":"demo5"}"
  [6] => string(32) "{"user_id":4,"username":"demo4"}"
  [7] => string(32) "{"user_id":3,"username":"demo3"}"
  [8] => string(32) "{"user_id":2,"username":"demo2"}"
  [9] => string(32) "{"user_id":1,"username":"demo1"}"
}

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 "
".$user_info['username']."出队列成功
"; //处理成功,将此信息移除队列。 $redis->lPop('data'); } }

结果:

demo10出队列成功

demo9出队列成功

demo8出队列成功

demo7出队列成功

demo6出队列成功

demo5出队列成功

demo4出队列成功

demo3出队列成功

demo2出队列成功

demo1出队列成功

你可能感兴趣的:(thinkphp,redis,thinkphp5,redis,消息队列)