当前位置:   article > 正文

java 频率控制_单个用户及Ip请求频率限制思路(附java实现)

频次控制 算法

我们熟悉的限流算法漏桶和令牌桶外,很多情况我们还需要考虑当个用户(ip)访问频率控制,避免被恶意调用。如果是开放平台限制一天调用多少次这种粗放的粒度相对好处理一些。如果需要更小时间粒度控制,譬如一个10秒时间窗口最大只允许访问10次,相对上述粗放粒度我们还需要考虑性能和边界两个问题。在这里提供一种思路给大家,这个也是我写的api网关访问频率控制的代码,经过了线上环境实践。

推荐: jeesuite开发框架,免费开源、一站式解决方案。

思路(以10秒限制10次为例)

定义一个全局map

key为用户标识(ip or sessionId),

value:List<10秒内访问时间戳>

private Map> accessDatas = new ConcurrentHashMap<>();

启动一个定时器,用于清除10秒前的访问时间

cleanScheduledExecutor.scheduleAtFixedRate(new Runnable() {

@Override

public void run() {

long currentTime = System.currentTimeMillis();

List < Long > accessPoints = null;

Iterator < String > idsIterator;

if (gloabalScanFlag == 5) {

//清理空记录

if (cleanNulling = accessDatas.size() > cleanNullSize) { <

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/544019
推荐阅读
相关标签
  

闽ICP备14008679号