Redis秒殺預防超賣邏輯

解決秒殺時超賣問題的三種思路。
1.悲觀鎖。
2.隊列。
3.樂觀鎖。

悲觀鎖:不多贅述,拿商品庫存數據時便上鎖鎖死,進行阻塞等待。容易崩潰。
隊列:lpop的原子性進行操作。
樂觀鎖:用redis的watch監聽一個key,作爲版本判斷。

原理圖如下:
在這裏插入圖片描述
事例將庫存作爲版本key。請根據實際情況選擇,此處只是思路演示。

//假設庫存爲5件商品
$store = 5;
//redis監視,售賣了多少
$redis->watch('sales');
$sales = $redis->get('sales');
if($sales >= $stroe){
	//賣出數量大於等於庫存 搶購結束
	return;
}
//開啓事務
$redis->multi();
$redis->set('sales',$sales+1);
//提交事務
$bool = $redis->exec();
//判斷事務是否成功 
if($bool){
	//搶購成功
	//進行db操作,此處省略

}else{
	//搶購失敗
	return ;
}

此上爲自我學習記錄。大神輕噴,歡迎提出建議和意見。
https://blog.csdn.net/weixin_38418601/article/details/104737301

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章