理论上用乐观锁解决 库存超卖问题
版本号法
- 为 tb_seckill_voucher 表新增一个版本号字段 version
- 线程1查询完库存,在进行库存扣减操作的同时将版本号+1,
- 线程2在查询库存时,同时查询出当前的版本号,
- 发现库存充足,也准备执行库存扣减操作,但是需要判断当前的版本号是否是之前查询时的版本号,
- 结果发现版本号发生了改变,这就说明数据库中的数据已经发生了修改,
- 需要进行重试(或者直接抛异常中断)
CAS法
- CAS法类似与版本号法,但是不需要另外在添加一个 version 字段,
- 而是直接使用库存替代版本号,
- 线程1查询完库存后进行库存扣减操作,
- 线程2在查询库存时,发现库存充足,也准备执行库存扣减操作,
- 但是需要判断当前的库存是否是之前查询时的库存,
- 结果发现库存数量发生了改变,这就说明数据库中的数据已经发生了修改,需要进行重试(或者直接抛异常中断)

浙公网安备 33010602011771号