微服務鎖庫存 防止庫存超賣


我覺得這種思路是類似樂觀鎖的    希望能和大家一起探討。

庫存表的表結構如下:

CREATE TABLE `sku_stock` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`sku_id` bigint unsigned NOT NULL,
`stock` DECIMAL(11,2) DEFAULT NULL COMMENT '庫存數量',
PRIMARY KEY (`id`)
)

 

業務代碼簡化后邏輯大概是這樣:1.扣庫存2.保存訂單。展開說下扣庫存這一步,

int i = skuStockService.reduceStock(skuId, buyCount);
if (i==0) {
throw new RuntimeException("沒有庫存了,下訂單失敗,事務回滾");

}
sql 是這樣的
<update id="reduceStock">
       update  sku_stock set stock = stock - #{buyCount} where stock- #{buyCount} >=0 and sku_id = #{skuId} ;
</update>

鎖庫存的邏輯就是判斷減庫存sql的影響條數,假如為0 則證明庫存不足,下單失敗。加入為1則扣減庫存成功順利下單

壓測試了下沒有問題,性能上可能不是很高,因為修改的時候應該會鎖表,實現很簡單。

歡迎大家留言評論,有更好的方法給大家分享下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM