理论上用乐观锁解决 库存超卖问题

版本号法

  • 为 tb_seckill_voucher 表新增一个版本号字段 version
  • 线程1查询完库存,在进行库存扣减操作的同时将版本号+1,
  • 线程2在查询库存时,同时查询出当前的版本号,
    • 发现库存充足,也准备执行库存扣减操作,但是需要判断当前的版本号是否是之前查询时的版本号,
    • 结果发现版本号发生了改变,这就说明数据库中的数据已经发生了修改,
    • 需要进行重试(或者直接抛异常中断)

CAS法

  • CAS法类似与版本号法,但是不需要另外在添加一个 version 字段,
  • 而是直接使用库存替代版本号,
  • 线程1查询完库存后进行库存扣减操作,
  • 线程2在查询库存时,发现库存充足,也准备执行库存扣减操作,
    • 但是需要判断当前的库存是否是之前查询时的库存,
    • 结果发现库存数量发生了改变,这就说明数据库中的数据已经发生了修改,需要进行重试(或者直接抛异常中断)
posted @ 2025-04-10 15:33  kuki'  阅读(44)  评论(0)    收藏  举报