php+redisメッセージキュー機能の実装

2306 ワード

php+redisメッセージキューは、php+mysqlのパフォーマンスが不足している場合の中間間処理スキームです.
適用シーン:
サーバの瞬時要求が大きく、データベースの圧力が大きい場合に使用します.例えば、同時販売量が大きいことによる超過、同時販売量が大きいことによるデータの重複状況.
メリット:
1、データの可用性と正確性を保証する.2、サーバーの瞬時の要求処理を非同期処理に変換し、サーバーの圧力を緩和する.3、データリストを順番に並べて取得することを実現する.プロセス:
1、php受信要求とデータ2、php redisキューにデータを書き込む(エンキュー)【関数rpush】3、php読み出しキューデータをmysqlに書き込む(アウトキュー)【関数lpop】4、キュー内の現在のデータを表示する【関数lrange】
備考:1、推奨タイミングタスク入キュー2、推奨タイミングタスク出キュー

   /**
     *        redis   (  )
     */
    public function inqueue()
    {
        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
        $password = '';
        $redis->auth($password);
        //$json = htmlspecialchars_decode($_POST["data"]); //GET POST       
        $json = '[{"username":"  ","course":"  ","score":145},{"username":"  ","course":"  ","score":149},{"username":"  ","course":"  ","score":147}]';
        $arr = json_decode($json, true);
        foreach ($arr as $k => $v) {
            $redis->rpush("myqueue", json_encode($v));
        }
    }

    /**
     *         mysql(  )
     */
    public function outqueue()
    {
        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
        $password = '';
        $redis->auth($password);
        //list      
        $value = $redis->lpop('myqueue');
        if ($value) {
//            $myarr = json_decode($value, true);
//            if ($myarr) {
//                Db::execute("INSERT INTO `student` (username, course, score) VALUES ('" . $myarr["username"] . "','" . $myarr["course"] . "'," . $myarr["score"] . ")");
//            }
            echo "    " . $value;
        } else {
            echo "    ";
        }
    }

    /**
     *           
     */
    public function lookqueue()
    {
        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
        $password = '';
        $redis->auth($password);
        $list = $redis->lrange('myqueue', 0, -1);
        var_dump($list);
    }