如何保證不賣超
有兩種情況可能會導致賣超:(1)乙個使用者同時發出了多個請求,如果庫存足夠,沒加限制,使用者就可以下多個訂單。(2)減庫存的sql上沒有加庫存數量的判斷,併發的時候也會導致把庫存減成負數。
我們的解決辦法:
對於(1):前端加驗證碼,防止使用者同時發出多個請求,在後端的miaosha_order表中,對user_id和goods_id加唯一索引,確保乙個使用者對乙個商品絕對不會生成兩個訂單。
對於(2):我們的減庫存的sql上應該加上庫存數量的判斷:
資料庫更新記錄的時候會加鎖,實際上是序列的執行update的,因此絕對不會賣超!
秒殺超賣問題
秒殺問題其實就是併發讀寫的問題,需要解決超賣,效率等問題。可以使用redis將秒殺的資料進行快取,通過啟用定時任務,當redis中的庫存為0時將,快取持久化到資料庫中,並且將redis中的快取清除掉。service slf4j public class orderserviceimpl extend...
mysql 樂觀鎖 超賣 秒殺超賣解決方案
方案一 redis事務處理 multi 我們可以使用redis中的監聽 watch 方法,去監聽庫存數量,一旦庫存數量在其他客戶端發生改變,後續操作則會失敗。watch key1 key2 監聽key1 key2有沒有變化,如果有變,則事務取消 方案二 redis分布式鎖 分布式鎖確保只有乙個執行緒...
php下用redis解決秒殺超賣問題
秒殺超賣問題,就是有乙個商品搶購活動,乙個商品假如有100件庫存,但是在搶購時有200人來搶購,這時就會併發,原本只有100的庫存但是搶購的人過多,就會發生資料庫裡原本只有100的庫存但是庫存為0的時候還會有人提交成功,這就是超賣。今天簡單的用redis的佇列來解決超賣問題。因為redis有list...