如何保證高併發下庫存不會被扣為負數

2021-09-11 16:13:38 字數 337 閱讀 1595

我面試被問到的時候有點懵,因為之前的業務都沒有涉及到這個,我回答的是加鎖,後面我看過其他人的回答後,總結了幾種方法

1.資料庫樂觀鎖

加乙個字段版本號

扣庫存的時候判斷一下版本號

2.把庫存字段改為unsigned

這樣可以保證庫存不為負數,如果併發情況下被扣為負數的時候會報錯,這個時候try catch然後返回庫存不足就可以了

3.用redis的list資料型別

把所有秒殺請求插入到redis的佇列了,當庫存達到閾值後停止插入,然後消費redis裡的資料

高併發下的庫存扣減方案

那年還很low db 剛開始我們的營銷專案組身單力薄,人微言輕 那時營銷業務才剛開始發展,此時我們把業務放到第一位,技術方案為滿足時間內業務發展所讓步。大家應該可以猜到,這個時候我們很low的庫存扣減方案 直接上資料庫。根據業務訴求,每個活動會儲存乙份實時變化的庫存,參與活動時,實時扣減資料庫,操作...

高併發下防止庫存超賣的解決方案

最近在看秒殺相關的專案,針對防止庫存超賣的問題,查閱了很多資料,其解決方案可以分為悲觀鎖 樂觀鎖 分布式鎖 redis原子操作 佇列序列化等等,這裡進行淺顯的記錄總結。首先我們來看下庫存超賣問題是怎樣產生的 1 2 3 45 6 1.查詢出商品 庫存資訊 select stock from t go...

如何保證redis高併發及高可用

1 面試題 如何保證redis的高併發和高可用?redis的主從複製原理能介紹一下麼?redis的哨兵原理能介紹一下麼?2 考點分析 其實問這個問題,主要是考考你,redis單機能承載多高併發?如果單機扛不住如何擴容抗更多的併發?redis會不會掛?既然redis會掛那怎麼保證redis是高可用的?...