如何在高并发场景下,库存扣减可能出现的数据不一致性问题。
示例:
如两个线程同时查询到库存num=5,其中一个线程扣减2个,另外一个线程扣减1个。最后库存num=4个,覆盖了另外一个线程执行的结果。
解决方案(利用乐观锁,可以理解为CAS原理)
(1) update stock set num=#{reduce_num} where stock_id=#{stock_id}
更改为:
(2) update stock set num=#{reduce_num} where stock_id=#{stock_id}
stock_id and num=#{old_num}