php redis實現在高並發下防止庫存超賣解決方案


php redis實現在高並發下防止庫存超賣解決方案

我直接用set get來實現 畢竟他速度最快。。

$prize_id=2;
//讀取庫存 如果緩存沒數據那就先讀取數據庫 里面也實現了分布式鎖

$sql='select prizecount from dsfs_prizelimit where id=?';
$key='prizeid'.$prize_id;
$prizecount=$this->getcacheinfo($sql,array($prize_id),$key,-1)[0]['prizecount'];
//如果沒有庫存了
if($prizecount<=0){
exit();
}
//實現購買邏輯
//庫存減去1 這個地方要注意 mysql事務成功后再去執行redis
$redis->set($key,$prizecount-1);

 

ps: 進入購買邏輯 如果購買失敗 redis庫存還是要減去的

上面代碼看的出來如果在高並發下明顯力不從心     

 

 

 

 

 

所以要讓代碼進化下 用redis 分段加鎖 另外1redis 生成2個redis   

 

直接把庫存讀取出來 比如100

分成2個就是除以2

 

$redis->set('ss1',50);

 $redis->set('ss2',50);

然后隨機讀取就行

 

不過上面代碼只能加快了判斷速度判斷庫存速度  下面購買邏輯速度還是一樣

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM