走取购项目-防止库存超卖

之前的一篇文章回顾了「走取购」创建订单时库存的扣减时机。今天再来看看项目对于库存超卖的解决办法。

什么是库存“超卖”?其实简单来讲就是多卖了,库存的数量变成了小于0。为什么会出现这种情况,因为明明在扣减库存的时候会去检查剩余数量,然后再进行减法运算。

是的,明面上看这是没什么问题,似乎挺合理的,看下伪代码:

1
2
3
4
5
6
7
8
9
10

public Boolean reduceStocks(String goodsId,int number){
Goods goodsEntity = goodsDAO.findOne(goodsId);
if(goodsEntity.getStock() >= number){
goodsDAO.reduceStock(goodsId,number);
return true;
}else{
return false;
}
}

上面这段简单的代码,如果是放在单线程里面执行,或者不是在高并发的场景下,一般不会发生库存超卖的情况,否则的话,是有大概率使其库存为负数的。

Read More