对外接口频率限制(每小时100次)

1.
//定时刷新
class Refures
{
//用于累加周期
long start = 0L;
long end = 0L;
//控制时钟周期
final long invet = 1000L*60*60L;
//这个运算可能要消耗1ms 忽略不计
boolean action()
{
//使用系统的计时器,永久有效。
start = System.currentTimeMillis();
if (start > end)
{
end = start + invet;
return true;
}
else
{
return false;
}
}
}


class YourInterface
{
static int callTimes = 0;
static Refures refures = new Refures();

//被调接口
static void youInterface()
{
//每1小时,就初始化一次
if (refures.action())
{
callTimes = 0;
}

callTimes++;

if (callTimes>=100)
{
return;
}

}

}


2.map<String,Long[]> map = new HashMap(String,Long[] ); key=用户标示,value={一分钟内首次访问时间,访问次数}

public void test(String username){
     Long []  userParam = map.get(username);
    
     if(userParam != null){//不是第一次访问
         Long 时间差  = 当前时间 - userParam[0]
          if(时间差小于一分钟){
                 int num = userParam[1];
                 if(num >=  10){
                      system.out.println("一分钟最多访问10次");
                 }else{
                       map.put(username,{userParam[0],userParam[1]+1});
                        user.getInterface();//调用接口
                }
          }else{
                  String [] addFirst = {当前时间,1};
                   map.put(username ,addFirst);
                   user.getInterface();//调用接口
           }
     }else{//第一次访问
          String [] addFirst = {当前时间,1};
           map.put(username ,addFirst);
           user.getInterface();//调用接口
     }
}


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值