thinkphp如何利用redis控制并发
2022-11-24 11:02:51
196
{{single.collect_count}}
下面由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 <= 10){$redis->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();//递归再次调用}}
登录后复制

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

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

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

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}