對庫存模塊從業務架構角度進行說明。
功能模塊劃分
- 下單的庫存預佔
- 出庫的庫存真實扣減
- 庫存的回滾(取消訂單(來自商家,用戶))
- 庫存的調整(訂單調整,商家的調整)
- 是否可買(限時銷售,定時銷售)
其他業務
- 銷量排名
- 庫存預警
涉及庫存場景
1.用戶正常流程
用戶下單-商家分揀-(快遞員取件)-物流運輸-快遞員投遞
2.用戶購買商品缺貨情況一
用戶下單-商家缺貨-用戶協商-調整缺貨商品-商家分揀-(快遞員取件)-物流運輸-快遞員投遞
3.用戶取消訂單
用戶下單-用戶取消
4.風控
用戶下單-風控根據規則設置爲異常單-訂單鎖定-訂單取消或者訂單繼續生產
5.商家維護可售庫存量,即時或者定時生效
庫存計算公式
可用庫存=現貨庫存-預佔庫存-鎖定庫存
問題
1.如果安全的扣減庫存?
update… set x_stock=x_stock-buy_num where id = … and x_stock>=buy_num
2.秒殺情況?限流,排隊
緩存放個庫存計數器,超過的請求直接返回
請求排隊
3.秒殺同一個用戶不能搶購一個商品2次?
緩存記錄用戶和搶購商品關係,記錄是否搶購過,如果搶購過就返回(記錄存在時間爲活動時間)