php Redisメッセージキューに基づいて実行されるメッセージの送信方法


基本的な知識点
ポイントは以下の命令を使って、私達のメッセージを実現して送ります。
  • bpopブロッキングモードは、キューの右から値を取得した後、
  • を削除する。
  • bpopushは、キューAの右から値を取った後に削除され、左からキューBに配置された
  • 論理分析
  • 普通のジョブスクリプトにプッシュプッシュプッシュを書き込みます。queueキューはメッセージのターゲットを送信し、目標のためにプッシュするコンテンツを設定し、いつまでも有効期限が切れません。
  • RedisPush Queにおけるbpopush処理は、処理後の値をtemp_に置く。queue、主にプログラムの崩壊によるプッシュ失敗を防止します。
  • Redis AutoDeleted TempqueueItems処理temp_queue、bpop
  • を使用しました。
    コードの実装
    通常のタスクスクリプト
    
    <?php
    foreach ($user_list as $item) {
      //         _  _ID_  6              "    "
      $k_name = 'rabbit_push_' . $item['uid'].'_'.rand(100000,999999);
      $redis->lPush('push_queue',$k_name);//    
      $redis->set($k_name, '    ');
    }
    
    RedisPusshQue
    
    <?php
    //        ~
    //
     //       
     // nohup php YOURPATH/RedisPushQueue.php &         ,            
    // blpop                                ,                    
     //     ~
     // BRPOPLPUSH                              
     //
    ini_set('default_socket_timeout', -1); //   
    require_once 'YOURPARH/Rongcloud.php';
    
    $redis = new \Redis();
    $redis->connect('127.0.0.1', 6379);
    $redis->select(2);//   db2
    $redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
    
    // temp_queue                    0      !
    While ($key = $redis->brpoplpush('push_queue', 'temp_queue', 0)) {
      if ($val = $redis->get($key)) {
        //rabbit_push_20_175990
        $arr = explode('_', $key);
        if (count($arr) != 4) {
          continue;
        }
        $id = $arr[2];
        push($id, $val);
        //  key  
        $redis->del($key);
      } 
    }
    function push($id, $v)
    {
     //    ~
    }
    
    
    Redis AutoDeletems
    
    <?php
    /*     temp_queue    ,       RedisPushQueue        
             brpop       temp_queue       ,      " "   " ",  RedisPushQueue     
        lpush push_queue ,      
            brpop  ,    RedisPushQueue       brpoplpush
     nohup php YOURPATH/RedisAutoDeleteTempqueueItems.php &         ,            
    */
    ini_set('default_socket_timeout', -1); //   
    $redis = new \Redis();
    $redis->connect('127.0.0.1', 6379);
    $redis->select(2);//   db2
    $redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
      while($key_arr = $redis->brPop('temp_queue',0)){
      if(count($key_arr) != 2){
        continue;
      }
      $key =$key_arr[1];
      if($redis->get($key)){//        RedisPushQueue    
        $redis->lPush('push_queue',$key);
      }
    }
    
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。