電商超賣問題

2021-09-27 09:30:52 字數 750 閱讀 6925

本專案的超賣類似於電商的秒殺超賣現象

1.不同使用者在讀請求的時候,發現商品庫存足夠,然後同時發起請求,進行秒殺操作,減庫存,導致庫存減為負數。

2.同乙個使用者在有庫存的時候,連續發出多個請求,兩個請求同時存在,於是生成多個訂單。

對於第一種超賣現象;

(1)最簡單的方法,更新資料庫減庫存的時候,進行庫存限制條件,

update miaosha_goods set stock_count = stock_count - 1 where goods_id = # and stock_count >0

可以簡單的解決超賣的情況

但是不能完全避免;

(2)究其深層原因,是因為資料庫底層的寫操作和讀操作可以同時進行,雖然寫操作預設帶有隱式鎖(即對同一資料不能同時進行寫操作)但是讀操作預設是不帶鎖的,所以當使用者1去修改庫存的時候,使用者2依然可以都到庫存為1,所以出現了超賣現象。

解決方案:

可以對讀操作加上顯式鎖(即在select …語句最後加上for update)這樣一來使用者1在進行讀操作時使用者2就需要排隊等待了

但是問題來了,如果該商品很熱門併發量很高那麼效率就會大大的下降,怎麼解決?

解決方案:

我們可以有條件有選擇的在讀操作上加鎖,比如可以對庫存做乙個判斷,當庫存小於乙個量時開始加鎖,讓購買者排隊,這樣一來就解決了超賣現象。

(3)應用乙個佇列快取,將多執行緒變為單執行緒讀寫。

2.第二種現象,將userid和商品id 加上唯一索引,可以解決這種情況。插入失敗。

電商 如何防止商品超賣

怎麼導致超賣?多個使用者同時購買同一件商品 相同sku 產生高併發多執行緒。如果商品的個數僅有1個,a執行緒獲取到結果時因為剩餘數量大於0,生成訂單 使用者付款。此時若在a執行緒生成訂單的途中,b執行緒獲取的商品剩餘數量是大於0的,也會生成訂單 使用者付款。導致結果只有一件商品賣了兩次,超賣了。解決...

電商系列 mysql高併發超庫存賣問題

先來就庫存超賣的問題作描述 一般電子商務 都會遇到如 秒殺 之類的活動,而這樣的活動有乙個共同的特點就是訪問量激增 上千甚至上萬人搶購乙個商品。然而,作為活動商品,庫存肯定是很有限的,如何控制庫存不讓出現超買,以防止造成不必要的損失是眾多電子商務 程式設計師頭疼的問題,這同時也是最基本的問題。從技術...

電商超賣現象的解決思路

在進行電商平台開發的時候,我們必定需要考慮到商品的超賣現象或者是秒殺模組功能的實現,因此不得不考慮到高併發所帶來的問題,綜合網上的各類部落格文章,我對商品超賣這樣的問題處理進行了從淺到深的逐步分析。秒殺和搶購功能類似 我們先從原先的方法來談論可能會出現什麼問題?原始方法就是直接查詢請求是否符合庫存數...