thinkphp如何利用redis控制并发

下面由thinkphp框架教程栏目给大家介绍thinkphp 利用redis 控制并发的方法,希望对需要的朋友有所帮助!

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

tp框架开发的项目,需求是想控制某项业务同一时刻的访问量,用redis锁机制来实现目的,在tp公共方法中创建公共函数 concurrence

/***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 incr('queue');//自增        if ($redis->get('clock') == $random) {//当clock值满足条件            $redis->del('clock');//删除$random随机数        }        $process = '处理具体的业务逻辑中,耗时不定,当前时间戳:'.time();        $endRandom = mt_rand();//随机数        $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) {//当clock值满足条件            $redis->del('clock');//删除$endRandom随机数        }        return $process;    }else{        if ($redis->get('clock') == $random) {            $redis->del('clock');        }        usleep(200000);//沉睡200毫秒        concurrence();//递归再次调用    }}

在控制器中,调用公共函数,处理相关业务

PatentPal专利申请写作 PatentPal专利申请写作

AI软件来为专利申请自动生成内容

PatentPal专利申请写作 13 查看详情 PatentPal专利申请写作

更多编程相关知识,请访问:编程教学!!

以上就是thinkphp如何利用redis控制并发的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/350100.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 21:52:09
下一篇 2025年11月5日 21:57:49

发表回复

登录后才能评论
关注微信