需求是限制IP频繁访问某接口,用的方案是使用redis记录访问IP的值,先设定好初始值,每次访问自增,达到某限定值后,进行阻止。
用的是自定义工具类,使用spring封装的spring-data-redis进行操作,在对某key进行increment()方法时,报错:
redis ERR value is not an integer or out of range
代码逻辑如下:
Integer count = (Integer) redisUtil.get(ipAddress);//取得key的value
if (count == null){
redisUtil.set(ipAddress,1,10);return false;
}else if(count == 3){return false;
}else{
redisUtil.incr(ipAddress,1);return false;
}
第一次进来,如果没有redis中没有数据,则设置key,value和time,key是ip, value初始值为1,有效时长为10秒。
如果没达到限制次数,则对key自增1。
redisUtil.incr()方法实现如下:
@Resourceprivate RedisTemplate redisTemplate; //这里使用的是redisTemplate
public void setRedisTemplate(RedisTemplateredisTemplate) {this.redisTemplate =r