@Autowired
private RedisTemplate redisTemplate;
/**
*
*/
private static final Logger logger = LoggerFactory.getLogger(T1Controller.class);
/**
* 一定时间内的访问次数
*/
private static final int ACCESS_FREQUENCY = 3;
@GetMapping("/t1")
@ResponseBody
public String t1(String userId){
logger.info("访问t1接口");
if(redisTemplate.hasKey("AccessFrequency:"+ userId)){
logger.info("redis已存在");
}else {
logger.info("设置一个新的redis");
//定义redis过期时间
redisTemplate.opsForValue().set("AccessFrequency:"+ userId, 0,10L, TimeUnit.SECONDS);
}
int redisAccessFrequency = (int)redisTemplate.opsForValue().get("AccessFrequency:"+userId);
redisAccessFrequency++;
if(redisAccessFrequency>ACCESS_FREQUENCY){
logger.debug("redisAccessFrequency:"+redisAccessFrequency);
return "访问次数太快!";
}else {
logger.debug("redisAccessFrequency:"+redisAccessFrequency);
/**
* set会消除设置的过期时间,所以先读取,再重新set
*/
long expire = redisTemplate.getExpire("AccessFrequency:"+userId);
redisTemplate.opsForValue().set("AccessFrequency:"+userId,redisAccessFrequency,expire,TimeUnit.SECONDS);
}
return "访问t1接口并且得到返回值";
}