【黑马点评-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)
posted @ 2025-04-15 12:48  kuki'  阅读(51)  评论(0)    收藏  举报