黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式
P54、优惠券强杀,库存卖超问题
不使用锁的方法
将扣减库存的SQL语句调整一下,添加一个 库存量>0 的条件,如果sql没更新,就抛异常进行回滚,这种方法合适吗?
// 扣减库存
boolean update = seckillVoucherService.update()
.setSql("stock = stock - 1").eq("voucher_id", voucherId)
.gt("stock", 0).update();
// 未更新库存时,抛异常回滚
if(!update){
throw new RuntimeException();
}
在JMeter里面做了并发测试,每秒300个线程的请求,是没有出现库存卖超问题的。

