微服务锁库存 防止库存超卖


我觉得这种思路是类似乐观锁的    希望能和大家一起探讨。

库存表的表结构如下:

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