メッセージキューの秒殺によるredis高同時タイミングタスクの実現

2757 ワード

メッセージキュー
コンセプト
(プロセスミドルウェア、2つ以上のシステムシーンが優位)
  • キュー構造のミドルウェア
  • メッセージを入れると、
  • を直ちに処理する必要はない.
  • は、購読者/消費者によって順次処理する
  • .
    げんり
    ビジネスシステム(エンキュー)->メッセージキュー->キュー処理システム
    シーン
  • データ冗長(永続化キューに格納オーダープログラムによる処理記憶各記録処理完了)
  • .
  • システム受注システムと配送システムのデカップリング
    mysql     
            id(11) order_id(11),mobile(vch20),created_at(datetime),status(tinyint(2))

    1つのファイルは、ユーザの注文情報を受け取り、キューに書き込むためのファイル(order.php)1である.ユーザから送信データをフィルタリングする(mysql注入防止).生成された注文情報はキュー表3に格納.キューリストにデータを格納する主に配送システムがキュー内の注文を処理してマークするファイル(goods.php)
  • 処理するレコードを、処理待ち
    $waiting = array('status'=>0)
    $lock =array('status'=>2)
    $res =update('duilie',$lock,$waiting);
  • に更新する.
  • 更新したばかりのデータを選択し、配送システムの処理
    if($res){
      //          
      $res=$db->selectAll('duilei',$lock);
      //             
      .......
    }
  • を行います.
  • これらの処理が完了したプログラムを、
    $arr =array(
        'status'=>1,
        'updated_at'=>date('y-m-d h:i:s',time());
    )
    タイミングスクリプト(goods.sh)crontab-eコマンドが毎分1回実行する#m h dom mon dow command分時日月週実行のコマンド*/1****/home/sites/goodsに更新する.sh >>/home/log.log 2>&1結果をログファイルに出力標準出力tail-f logを変換する.logモニタログファイル
  • #!/bin/bash
    date"+%G-%m-%d  %H:%M:S"  
    cd   goods.sh   (/home/sites/)
    php goods.php
     
  • 流量削峰listタイプ秒殺
  • を実現
     
         id(int10),uid(int11),time_stamp(vach24)

     
    user.php
      redis  
        $redis = new Redis();
        $redis->connect('127.0.0.1',6379);
        $redis_name="miaosha";
        
             
        for($i=0;$i<100;$i++){
        $uid = rand(100000,999999);
        }
        
    ​
        uid
        $uid =$_GET['uid'];
      redis       
        $num =10;
            10,     
    if($redis->lLen($redis_name) <10)
    {
      $redis->rPush($redis_name,$uid.'%'.microtime());
    }else
    {
      10 ,      
    echo '    ';
    }
    $redis->clsoe();
    ​
    ​

    save.php
       
    while(1)
    {
        //           
        $user =$redis->lPop($redis_name);
        //           
        if(!$user || $user =='nil')
        {
            sleep(2);
            continue;
         
        }
    }
         ,uid
    $user_arr = explode('%',$user);
    $insert_data  = array(
        
    )
           
    ​
                
      redis
    ​

     
  • 非同期通信
  • 並べ替え保証
  • 拡張性
  • キューのメリットとデメリット
    キューメディア
  • mysql:信頼性が高く、実現を意図し、速度が遅い
  • redis:速度が速く、単一の大きなメッセージパケットの効率が低い
  • メッセージシステム:専門性が強く、信頼性が高く、学習コストが高い
  • メッセージ処理トリガメカニズム
  • デッドサイクル方式読み取り:実現しやすく、故障時に
  • に直ちに回復できない
  • 定死任務:圧力は均一で、処理量の上限がある
  • デーモンプロセス:php-fpmおよびphp-cgと同様にshellベース
  • が必要です.
     
    lpush/lpushx存在するリストヘッダに値を挿入
    RabbitMQより専門的なメッセージシステム実装スキーム(複雑な論理プロジェクト)