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

    }

}

結果:

demo10出隊列成功

demo9出隊列成功

demo8出隊列成功

demo7出隊列成功

demo6出隊列成功

demo5出隊列成功

demo4出隊列成功

demo3出隊列成功

demo2出隊列成功

demo1出隊列成功

轉載:https://blog.csdn.net/qq_35679620/article/details/103306139

 

---------------------------------------------------------------

 $redis = new \Redis();
        $redis->connect("1xx.2xx.1xx.2xx3",'6379');
        $redis->auth('xxx');
        $redis->select(1);
        $count  = $redis->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');

        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM