真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

thinkphp利用redis控制并發(fā)的方法

小編給大家分享一下thinkphp利用redis控制并發(fā)的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)是一家專業(yè)提供佛坪企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為佛坪眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

tp框架開(kāi)發(fā)的項(xiàng)目,需求是想控制某項(xiàng)業(yè)務(wù)同一時(shí)刻的訪問(wèn)量,用redis鎖機(jī)制來(lái)實(shí)現(xiàn)目的,在tp公共方法中創(chuàng)建公共函數(shù) concurrence

/**
*redis控制并發(fā)
**/
function concurrence(){

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

    //進(jìn)入隊(duì)列及出列,queue在加減的時(shí)候,要保證操作的唯一性,此時(shí)加鎖,完成后在解鎖
    $random = mt_rand();//生成隨機(jī)數(shù)
    $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('queue');//自增
        if ($redis->get('clock') == $random) {//當(dāng)clock值滿足條件
            $redis->del('clock');//刪除$random隨機(jī)數(shù)
        }
        $process = '處理具體的業(yè)務(wù)邏輯中,耗時(shí)不定,當(dāng)前時(shí)間戳:'.time();

        $endRandom = mt_rand();//隨機(jī)數(shù)
        $end = $redis->set('clock', $endRandom, array('nx', 'ex' => 10));//redis加鎖,鎖有效期10秒
        while (!$end) 
        {
            usleep(100000);//沉睡100毫秒
            $end = $redis->set('clock', $endRandom, array('nx', 'ex' => 10));//redis加鎖,鎖有效期10秒
        }
        $redis->decr('queue');//自減
        if ($redis->get('clock') == $endRandom) {//當(dāng)clock值滿足條件
            $redis->del('clock');//刪除$endRandom隨機(jī)數(shù)
        }
        return $process;
    }else{
        if ($redis->get('clock') == $random) {
            $redis->del('clock');
        }
        usleep(200000);//沉睡200毫秒
        concurrence();//遞歸再次調(diào)用
    }

}

在控制器中,調(diào)用公共函數(shù),處理相關(guān)業(yè)務(wù)

以上是“thinkphp利用redis控制并發(fā)的方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


當(dāng)前名稱:thinkphp利用redis控制并發(fā)的方法
標(biāo)題路徑:http://weahome.cn/article/ghissh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部