请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

有个疑问分布式锁解决某用户重复抢单的问题?

感觉像是老师故意设计的,有个很明显的线程安全问题是,当同一个用户由于并发量比较高的情况下,部分用户通过【是否重复购票】验证,直接进入抢锁入口,是否需要在锁住的资源层面,进行再次【是否重复购票】验证

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());
                ...
                
	}

正在回答 回答被采纳积分+3

2回答

慕仔8930017 2021-01-13 18:55:06

请教一下。按照课程中老师的设计,锁的过期时间 = 活动结束时间 - 当前时间。 所以参加过活动的用户在活动期间是拿不到锁的,为啥还需要在锁住的资源层面,进行再次【是否重复购票】验证呢?

0 回复 有任何疑惑可以回复我~
InCowboy 2020-12-22 09:03:53

这都被你发现了,这里在判断一下也是可以的

0 回复 有任何疑惑可以回复我~
  • 我倒觉得不用多次判断是否重复购票,只需要将加锁的逻辑放在秒杀service方法的一开头部分,保证一个用户对同一种优惠券只能先去获取锁,获取不到,直接就返回了
    回复 有任何疑惑可以回复我~ 2021-05-16 01:49:00
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信