>  기사  >  PHP 프레임워크  >  thinkphp가 redis를 사용하여 동시성을 제어하는 ​​방법

thinkphp가 redis를 사용하여 동시성을 제어하는 ​​방법

藏色散人
藏色散人앞으로
2021-01-05 17:01:173098검색

다음 thinkphp프레임워크 튜토리얼 칼럼에서는 thinkphp가 redis를 사용하여 동시성을 제어하는 ​​방법을 소개합니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

author:he
qq:760863706
tp:3.2.3
date:2018-10-19

tp 프레임워크 개발 프로젝트에서 요구사항은 특정 비즈니스에 대한 액세스를 제어하는 ​​것입니다. 동시에 Quantity, 목적을 달성하기 위해 redis 잠금 메커니즘을 사용하고 tp 공개 메소드에서 공개 함수 동시성을 생성합니다

/**
*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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제