当前位置: 首页 > 后端技术 > Java

商品库存扣除过程中如何防止超卖?

时间:2023-04-01 23:01:04 Java

在商品采购过程中,库存扣减流程的一般操作如下:1.选择根据商品id查询商品库存。2.根据订单数量,计算库存是否充足。如果库存不足,则会抛出库存不足异常。如果存货充足,减去扣除的存货,得到最新的存货剩余价值。3.set设置最新库存剩余值。上述过程伪代码如下://根据商品id获取商品剩余库存selectstock_remaingfromstock_tablewhereid=${goodsId};//操作库存//比较库存if(stock_remaing${quantity};在分布式服务调用中,由于网络异常,调用微服务时可能会获取服务器异常。服务重试。比如场景的网关超时,服务重试机制。这个时候这个方法不满足幂等性,反而出现了超推的情况。例如,当同一用户扣除库存时,重试该服务。极端情况下,用户多次执行减库存操作,导致产品超卖。redis可以用来做库存抵扣吗?由于没有研究过redis源码,所以这个方法参考了大牛的回复。答案是可以用redis的事务性扣余额,但是在CAS机制上比mysql没有优势。高性能归功于其内存存储。副作用是存在数据丢失的风险。