Ce qui suit est la colonne du didacticiel du framework thinkphp pour vous présenter comment thinkphp utilise Redis pour contrôler la simultanéité. J'espère que cela sera utile aux amis dans le besoin !
auteur:il
qq:760863706
tp:3.2.3
date:2018 -10-19
Projet de développement de cadre Tp, l'exigence est de contrôler le volume d'accès d'une certaine entreprise en même temps, d'utiliser le mécanisme de verrouillage Redis pour atteindre l'objectif, de créer une concurrence de fonction publique dans la méthode tp public
/** *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();//递归再次调用 } }
Dans le contrôleur, appelez les fonctions publiques et gérez les affaires associées
Pour plus de connaissances liées à la programmation, veuillez visiter : Tutoriel de programmation ! !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!