有令牌大闸为什么还要在点击下单的时候生成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
为了解耦功能分离
012021-04-22
相似问题