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 <= 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中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章
刺客信条阴影:贝壳谜语解决方案
3 周前
By DDD
Windows 11 KB5054979中的新功能以及如何解决更新问题
2 周前
By DDD
在哪里可以找到原子中的起重机控制钥匙卡
3 周前
By DDD
<🎜>:死铁路 - 如何完成所有挑战
4 周前
By DDD
Atomfall指南:项目位置,任务指南和技巧
1 个月前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)
