防止庫存超賣方法總結


1、簡單處理【update & select 合並】(樂觀鎖)

2、使用redis隊列

實現的方式是用的redis的list隊列,框架為laravel

核心部分為list的pop操作,此操作為原子性,即使很多用戶同時到達,也是依次執行

2.mysql 當mysql單表的數據量大於1000萬行時,建議進行水平分拆。

利用redis的incr、decr的原子性做操作
redis的lpush、rpop的原子性做操作,但是這個只能一個一個的扣,但不能原子地同時扣多個
sql樂觀鎖

 

 

 

二、扣減庫存
安全扣減庫存方案有很多說法,列一下幾個方案和我推薦的方案。

方案一:分布式鎖
有的文章會用redis分布式鎖來做保證扣庫存數量准確的環節,讓點擊結算時,后端邏輯會查詢庫存和扣庫存的update語句同時只有一條線程能夠執行,以商品id為分布式鎖的key,鎖一個商品。但是這樣,其他購買相同商品的用戶將會進行等待。

優點:這樣做雖然安全
缺點:但是失去的是性能問題。
方案二:分布式鎖+分段緩存
也有文章會說借鑒ConcurrenthashMap,分段鎖的機制,把100個商品,分在3個段上,key為分段名字,value為庫存數量。用戶下單時對用戶id進行%3計算,看落在哪個redis的key上,就去取哪個。

 


免責聲明!

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



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