關於電商庫存扣減問題
阿新 • • 發佈:2019-01-03
方案1:在下單就鎖定庫存
優點:可以解決庫存減扣問題
缺點:體驗差,如果只下單未付款,庫存被鎖定,讓有意願購買的使用者無從下單,對銷售業務有很大影響;
方案2:支付時鎖定庫存
訂單表
訂單唯一編號 庫存鎖定狀態(1庫存已鎖定 2庫存已釋放 3庫存已確認,庫存減扣成功)
-------------------------------------------------------------------------------------
訂單詳細表
訂單編號 商品id 購買數量
-------------------------------------------------------------------------------------
商品庫存表
商品id 庫存數量 庫存鎖定數量 限購數量
-------------------------------------------------------------------------------------
A商品庫存 50個
使用者1 下單45個
使用者2 下單20個
業務場景及解決方式:
使用者1和使用者2可能同時點選支付按鈕,此時對於商品鎖定庫存來說只能有一個使用者會鎖定A商品的庫存,剩下一個肯定鎖定失敗,此時應該提示其中一個使用者(庫存可能不足,請稍後再試),這裡更新庫存減扣應該都有前置條件的或者說版本號
另一個使用者跳轉到三方支付介面,
如果此使用者取消支付,客戶端應該傳送一條訊息告訴服務端恢復庫存鎖定,
如果此使用者支付成功,客戶端應該傳送一條訊息告訴服務端確認減扣庫存,
客戶端可能因某種情況傳送失敗,此時要考慮使用定時任務恢復超過多久庫存還處於(根據鎖定狀態)鎖定中的訂單商品庫存,應該先呼叫支付系統關閉原有未完成支付的訂單,然後再恢復商品鎖定庫存
支付系統非同步通知支付成功修改庫存,此時根據庫存鎖定狀態進行不同的業務處理(1庫存已鎖定 2庫存已釋放 3庫存已確認,庫存減扣成功)
當然如果是秒殺促銷業務應該是下單即鎖定庫存
步驟雖然繁瑣但是卻可以解決庫存減扣的問題
以上實現方式主要是最近公司開發的一個電商系統而想到的解決方案,該方案主要參考了淘寶的下單支付,如有不妥請指出
優點:可以解決庫存減扣問題
缺點:體驗差,如果只下單未付款,庫存被鎖定,讓有意願購買的使用者無從下單,對銷售業務有很大影響;
方案2:支付時鎖定庫存
下面主要講解支付鎖定庫存的的實現步驟,以下是使用到的關鍵表
-------------------------------------------------------------------------------------訂單表
訂單唯一編號 庫存鎖定狀態(1庫存已鎖定 2庫存已釋放 3庫存已確認,庫存減扣成功)
-------------------------------------------------------------------------------------
訂單詳細表
訂單編號 商品id 購買數量
-------------------------------------------------------------------------------------
商品庫存表
商品id 庫存數量 庫存鎖定數量 限購數量
-------------------------------------------------------------------------------------
A商品庫存 50個
使用者1 下單45個
使用者2 下單20個
業務場景及解決方式:
使用者1和使用者2可能同時點選支付按鈕,此時對於商品鎖定庫存來說只能有一個使用者會鎖定A商品的庫存,剩下一個肯定鎖定失敗,此時應該提示其中一個使用者(庫存可能不足,請稍後再試),這裡更新庫存減扣應該都有前置條件的或者說版本號
另一個使用者跳轉到三方支付介面,
如果此使用者取消支付,客戶端應該傳送一條訊息告訴服務端恢復庫存鎖定,
如果此使用者支付成功,客戶端應該傳送一條訊息告訴服務端確認減扣庫存,
客戶端可能因某種情況傳送失敗,此時要考慮使用定時任務恢復超過多久庫存還處於(根據鎖定狀態)鎖定中的訂單商品庫存,應該先呼叫支付系統關閉原有未完成支付的訂單,然後再恢復商品鎖定庫存
支付系統非同步通知支付成功修改庫存,此時根據庫存鎖定狀態進行不同的業務處理(1庫存已鎖定 2庫存已釋放 3庫存已確認,庫存減扣成功)
當然如果是秒殺促銷業務應該是下單即鎖定庫存
步驟雖然繁瑣但是卻可以解決庫存減扣的問題
以上實現方式主要是最近公司開發的一個電商系統而想到的解決方案,該方案主要參考了淘寶的下單支付,如有不妥請指出