ホームページ  >  記事  >  PHPフレームワーク  >  thinkphp が Redis を使用して同時実行性を制御する方法

thinkphp が Redis を使用して同時実行性を制御する方法

藏色散人
藏色散人転載
2021-01-05 17:01:173136ブラウズ

次の thinkphp フレームワーク チュートリアルのコラムでは、thinkphp が redis を使用して同時実行性を制御する方法を紹介します。

著者:彼

qq:760863706
tp:3.2.3
日付:2018 - 10-19

tp フレームワークで開発されたプロジェクトは、特定の業務のアクセス量を同時に制御する必要があり、その目的を達成するために redis ロック機構を使用し、パブリック機能の同時実行を作成します# tp public メソッド内

##

/**
*redis控制并发
**/
function concurrence(){

    //实例化redis
    $redis = new \Redis();
    $redis->connect(C('REDIS_HOST'),C('REDIS_PORT'));
    $redis->auth(C('REDIS_AUTH'));

    //进入队列及出列,queue在加减的时候,要保证操作的唯一性,此时加锁,完成后在解锁
    $random = mt_rand();//生成随机数
    $start = $redis->set('clock', $random, array('nx', 'ex' => 10));//redis加锁,锁有效期10秒
    while (!$start) 
    {
        usleep(100000);//沉睡100毫秒
        $start = $redis->set('clock', $random, array('nx', 'ex' => 10));//redis加锁,锁有效期10秒
    }
    $queue = $redis->get('queue');
    if ($queue <= 10)
    {
        $redis->incr(&#39;queue&#39;);//自增
        if ($redis->get(&#39;clock&#39;) == $random) {//当clock值满足条件
            $redis->del(&#39;clock&#39;);//删除$random随机数
        }
        $process = &#39;处理具体的业务逻辑中,耗时不定,当前时间戳:&#39;.time();

        $endRandom = mt_rand();//随机数
        $end = $redis->set(&#39;clock&#39;, $endRandom, array(&#39;nx&#39;, &#39;ex&#39; => 10));//redis加锁,锁有效期10秒
        while (!$end) 
        {
            usleep(100000);//沉睡100毫秒
            $end = $redis->set(&#39;clock&#39;, $endRandom, array(&#39;nx&#39;, &#39;ex&#39; => 10));//redis加锁,锁有效期10秒
        }
        $redis->decr(&#39;queue&#39;);//自减
        if ($redis->get(&#39;clock&#39;) == $endRandom) {//当clock值满足条件
            $redis->del(&#39;clock&#39;);//删除$endRandom随机数
        }
        return $process;
    }else{
        if ($redis->get(&#39;clock&#39;) == $random) {
            $redis->del(&#39;clock&#39;);
        }
        usleep(200000);//沉睡200毫秒
        concurrence();//递归再次调用
    }

}

コントローラーでパブリック関数を呼び出し、関連するビジネスを処理します

プログラミング関連の知識については、

プログラミング教育##を参照してください。 #! !

以上がthinkphp が Redis を使用して同時実行性を制御する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。