有令牌大闸为什么还要在点击下单的时候生成token呢?

来源:9-4 秒杀大闸原理及实现

yidaimi

2020-03-06

老师,
既然在发布活动的时候已经在redis中定义了这个活动的令牌总数,那在点击下单的时候为什么还要生成token呢?能否直接在createOrder减库存之前先去将令牌总数-1,通过判断减小后的数量是否小于0来判断是否可以继续进行秒杀?也就是说下面generateSecondKillToken方法中的这段代码:

    /***能否将这段increment逻辑直接放在createOrder减掉redis库存之前?***/
    //获取秒杀大闸的count数量
    long result = redisTemplate.opsForValue().increment("promo_door_count_"+promoId,-1);
    if(result < 0){
        return null;
    }
    /***并且删除下面这段代码删除?***/
    //生成token并且存入redis内并给一个5分钟的有效期
    String token = UUID.randomUUID().toString().replace("-","");
    redisTemplate.opsForValue().set("promo_token_"+promoId+"_userid_"+userId+"_itemid_"+itemId,token);
    redisTemplate.expire("promo_token_"+promoId+"_userid_"+userId+"_itemid_"+itemId,5, TimeUnit.MINUTES);

谢谢!

写回答

1回答

龙虾三少

2020-03-07

为了解耦功能分离

0
1
Code_Deli
老师您好 ,解耦功能分离只需要解耦验证用户和活动商品就OK了啊,为什么要加一个token呢?没明白token字符串的意义在哪
2021-04-22
共1条回复

聚焦Java性能优化 打造亿级流量秒杀系统(赠秒杀项目)

理解高流量电商网站性能构建思路 用高逼格技术解决性能提升问题

2174 学习 · 1009 问题

查看课程