不知道这种思路有没有问题
在更新库存的时候,可利用update的行级锁机制,在where条件后增加 库存数>=商品购买数量,这就解决了库存出现负数的情况(如果超卖,更新库存会失败,也就不需要回滚更新库存操作)。剩下要解决的就是订单数多于库存数的问题。可在更新库存后,获取更新的记录数,判断是否小于等于0,如果是,则抛出异常,库存不足无法购买。也就不需要利用其它的锁了。
<update id="updateProductCount">
update product
set count = count - #{purchaseProductNum,jdbcType=INTEGER},
update_user = #{updateUser,jdbcType=VARCHAR},
update_time = #{updateTime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=INTEGER}
and count >= #{purchaseProductNum,jdbcType=INTEGER}
</update>
int updateProductCount = productMapper.updateProductCount(purchaseProductNum, "xxx", new Date(), purchaseProductId);
if(updateProductCount<=0){
throw new Exception("商品"+purchaseProductId+"库存不足,无法购买");
}
经过测试,是实际可行的。但不是很确定在分布式环境中,是不是百分比可行
正在回答 回答被采纳积分+1
这种方案可行,但是压力都在数据库上,访问量大的时候容易把数据库搞死。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星