有个疑问分布式锁解决某用户重复抢单的问题?
来源:4-7 Redisson分布式锁的应用
smniuhe
2020-12-20
感觉像是老师故意设计的,有个很明显的线程安全问题是,当同一个用户由于并发量比较高的情况下,部分用户通过【是否重复购票】验证,直接进入抢锁入口,是否需要在锁住的资源层面,进行再次【是否重复购票】验证
try {
// Redisson 分布式锁处理
boolean isLocked = lock.tryLock(expireTime, TimeUnit.MILLISECONDS);
if (isLocked) {
AssertUtil.isTrue(voucherOrdersMapper.findDinerOrder(dinerInfo.getId(),
seckillVouchers.getFkVoucherId()) != null, "该用户已抢到该代金券,无需再抢");
// 下单
VoucherOrders voucherOrders = new VoucherOrders();
voucherOrders.setFkDinerId(dinerInfo.getId());
...
}
写回答
2回答
-
慕仔8930017
2021-01-13
请教一下。按照课程中老师的设计,锁的过期时间 = 活动结束时间 - 当前时间。 所以参加过活动的用户在活动期间是拿不到锁的,为啥还需要在锁住的资源层面,进行再次【是否重复购票】验证呢?
00 -
InCowboy
2020-12-22
这都被你发现了,这里在判断一下也是可以的
012021-05-16
相似问题