当前位置: 首页 > 后端技术 > PHP

解决高并发IO瓶颈和解决红包程序

时间:2023-03-29 21:57:37 PHP

解决高并发IO瓶颈和解决红包程序本程序模拟红包抽奖模式。总金额为100元,随机用户获得1-10元的红包,直至红包派发完毕。redis中的luckMoneyMax需要提前设置$r->set('luckMoneyMax',100);Text/***随机领取红包*总金额100元*每个红包大小[1,10]*/publicfunctionluckMoney(){$r=new\Redis();$r->pconnect('127.0.0.1','6379');$r->选择(1);$lock_key='锁匙';while(true){$lock_timout=time()+3+1;//4秒超时,一个锁超过??4s还没有释放,说明拿到锁的线程被其他线程挂了,需要竞争释放锁再获取锁$get_lock=$r->setnx($lock_key,$lock_timout);//setnx获取锁的返回值为真且超时,getSet保证不会有多个进程释放锁$now=time();if($get_lock||(($now>$r->get($lock_key))&&($now>$r->getSet($lock_key,$lock_timout)))){echo'去抽奖吧!
';break;//去抽奖}}$luckMoneyMax=$r->get('luckMoneyMax');if($luckMoneyMax<=0){echo'奖金池为空!';if((time()<$lock_timout)&&$r->del($lock_key)){echo'
毫秒时间:'.$this->msectime().'锁释放成功';}返回;}elseif($luckMoneyMax<=1){$redBag=$luckMoneyMax;$r->set('luckMoneyMax',0);$data_arr=['redBag'=>$redBag,'mstime'=>$this->msectime()];$r->lpush("redBag-list",serialize($data_arr));echo'恭喜中奖'.$redBag;if((time()<$lock_timout)&&$r->del($lock_key)){echo'
毫秒时间:'.$this->msectime().'释放锁成功';}返回;}//1-10十元整数$redBag=rand(1,10);$tmp_money=$luckMoneyMax-$redBag;如果($tmp_money<0){$redBag=$luckMoneyMax;$tmp_money=0;$r->set('luckMoneyMax',$tmp_money);$data_arr=['redBag'=>$redBag,'mstime'=>$this->msectime()];$r->lpush("redBag-list",serialize($data_arr));echo'恭喜中奖'.$redBag.'yuan';if((time()<$lock_timout)&&$r->del($lock_key)){echo'
毫秒时间:'.$this->msectime().'锁释放成功';}}/***毫秒级别*@returnfloat*/publicfunctionmsectime(){list($msec,$sec)=explode('',microtime());$msectime=(float)sprintf('%.0f',(floatval($msec)+floatval($sec))*1000);返回$毫秒;}swoole多线程测试start();echoPHP_EOL;//PHP_EOL换行的含义echo$red_process->read();echoPHP_EOL;}echo"end:".date("Y-m-dH:i:s").PHP_EOL;functiongetMoney(swoole_process$worker){$content=getHTTPS('http://example.com/index/index/复制代码luckMoney.html');$worker->write($content);}functiongetHTTPS($url){$ch=curl_init();curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($ch,CURLOPT_HEADER,false);curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_REFERER,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);$result=curl_exec($ch);curl_close($ch);return$result;}Thelogrecordresultisextracted100timesin2s毫秒红包金额毫秒时间1514386342125红包10元毫秒时间1514386342106红包10元毫秒时间1514386342086红包10元毫秒时间1514386342066红包7元毫秒时间1514386342046红包6元毫秒时间1514386342026红包5元毫秒时间1514386342007红包3元毫秒时间1514386341988红包1元毫秒时间1514386341968红包7元毫秒时间1514386341950红包5元毫秒时间1514386341931红包8元毫秒时间1514386341913红包7元毫秒时间1514386341894红包1元毫秒时间1514386341875红包1元毫秒时间1514386341856红包9元毫秒时间1514386341836红包10元合计100yuanrecommendation:1millionopenidsarequicklydepositedintoredis