一般第三方api都会有每分钟或者每秒限定调用次数的功能,这也是为了防止恶意调用攻击服务器而做的。开发中登陆次数,调用次数这些类似的功能都可以放到redis中去实现。
思路:前端发送接口调用请求,将可以作为唯一标记的字段作为key,放到redis中,并可以设置有效时间。在key有效时间内,每调用一次增加1。若次数超过限定则限定处理就可以了。
下面是仿照第三方开放api,实现的一个小demo.
public void checkNumber (String xxx) { //xxx 可以作为唯一标识的字段
Integer count = 100; //count 限定调用次数可以从数据库中取数据也可以在代码中规定
Integer limitTime = 60; //过期时间
Integer redisCount = null;
if (redisUtil.hasKey(xxx)){
redisCount = (Integer)redisUtil.get(xxx);
if(redisCount >= count) {
//throw new Exception("接口调用超出限定次数");
}else {
redisUtil.incr(xxx,1);
}
}else {
redisUtil.set(xxx,1);//若不存在设置key
redisUtil.expire(xxx,limitTime); //指定过期时间
}
}
redisUtil工具类,网上有很多可以直接找来用。