@Value("${spring.redis.password}")
private String redisPwd;
/**
* 配置分布式锁的redisson
* @return
*/
@Bean
public RedissonClient redissonClient(){
Config config = new Config();
//单机方式
config.useSingleServer().setPassword(redisPwd).setAddress("redis://"+redisHost+":"+redisPort);
//集群
//config.useClusterServers().addNodeAddress("redis://192.31.21.1:6379","redis://192.31.21.2:6379")
RedissonClient redissonClient = Redisson.create(config);
return redissonClient;
}
/**
* 集群模式
* 备注:可以用"rediss://"来启用SSL连接
*/
/*@Bean
public RedissonClient redissonClusterClient() {
Config config = new Config();
config.useClusterServers().setScanInterval(2000) // 集群状态扫描间隔时间,单位是毫秒
.addNodeAddress("redis://127.0.0.1:7000")
.addNodeAddress("redis://127.0.0.1:7002");
RedissonClient redisson = Redisson.create(config);
return redisson;
}*/
}
- 使用说明:在下单接口标注@RepeatSubmit(limitType = RepeatSubmit.Type.TOKEN)
- 或者@RepeatSubmit(limitType = RepeatSubmit.Type.PARAM)
/**
* 下单前获取令牌,用于防重提交
* @return
*/
@GetMapping("token")
public JsonData getOrderToken() {
Long accountNo = LoginInterceptor.threadLocal.get().getAccountNo();
String token = CommonUtil.getStringNumRandom(32);
String key = String.format(RedisKey.SUBMIT_ORDER_TOKEN_KEY, accountNo, token);
// token 过期时间30分钟
redisTemplate.opsForValue().set(key, String.valueOf(Thread.currentThread().getId()), 30, TimeUnit.MINUTES);
return JsonData.buildSuccess(token);
}
@PostMapping("confirm")
@RepeatSubmit(limitType = RepeatSubmit.Type.TOKEN)
public void confirmOrder(@RequestBody ConfirmOrderRequest orderRequest, HttpServletResponse response) {
// TODO 下单业务
}