库存扣减的流水账记录问题

场景描述:

        商品都有库存数,每卖出N件,就会将库存减N。系统在这个过程做了两件事情:

        1,扣库存前,先将该商品的当前库存数从“商品库存表”中查出来,记录流水账信息到“库存扣减流水表”中,包括该商品的当前库存、扣减数量、扣减后的库存。

        2,扣减库存,更新库存表的商品库存数。

问题描述:

        在单线程下没有问题,但是在多线程并发卖同一个商品的时候,出现了问题:

        存库表的存库是正确的,也是就是说现有系统的隔离级别,防止了在多线程下扣减库存错误();但是记录库存扣减流水信息时,    出现了两个线程的读取到的当前库存数一样,期望的结果是:当前线程读取到的库存数必须是上一个线程扣减库存后的库存。

问题分析:

        库存是当前线程,读取到内存中的,依次记录流水,扣减存库。所以当前线程必须等到上个线程事务提交后,扣减库存更新到数据库后,才能去库存表中查出库存数。

解决方案:

        在查询库存的SQL语句后增加for update,锁定当前记录;后来的线程,执行该语句时,将处于阻塞状态,只有等待前面的线程事务提交后,后来的线程的查询语句才会有返回结果。这时返回的库存已是最新的库存。

 

转载于:https://www.cnblogs.com/firebata/p/4332683.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值