【黑马点评-3秒杀优惠券】二、乐观锁(库存字段)解决超卖,解决不了一人一单 + 单体秒杀初始逻辑
boolean flag = seckillVoucherService.update(
new LambdaUpdateWrapper<SeckillVoucher>()
.eq(SeckillVoucher::getVoucherId, voucherId)
.eq(SeckillVoucher::getStock, voucher.getStock())
.setSql("stock = stock - 1")
);
这段代码中
.eq(SeckillVoucher::getStock, voucher.getStock())
此条件用于实现乐观锁机制,以确保在高并发环境下的数据一致性。
-
当前库存指数据库中
SeckillVoucher表的stock字段当前的值 -
预期库存 指在执行更新操作之前,应用程序从数据库中查询到的
stock值,即voucher.getStock()
通过在更新条件中添加eq(SeckillVoucher::getStock, voucher.getStock()),系统在执行更新操作时会检查数据库中的stock是否与预期值一致
为提高效率,判断>0,但是解决不了一人一单,只能解决库存超卖
改上面一句为
.gt(SeckillVoucher::getStock, 0)

浙公网安备 33010602011771号