1. 基于QPS的限流 即单位时间的请求数不能超过一个阈值

package com.multiplyzero.mz.core.rpc;

import java.util.concurrent.TimeUnit;

import java.util.concurrent.atomic.AtomicInteger;

/**

*

* QpsRateLimiter

*

* @author xy.z@qq.com

*

* @since 2018年11月16日 上午10:09:12

*/

public class QpsRateLimiter {

private long lastTime;

private long interval;

private AtomicInteger remaind;

private int rate;

public QpsRateLimiter(int rate, long interval, TimeUnit unit) {

this.rate = rate;

this.interval = unit.toMillis(interval);

this.lastTime = System.currentTimeMillis();

this.remaind = new AtomicInteger(rate);

}

public boolean allowable() {

long now = System.currentTimeMillis();

if (now > lastTime + interval) {

remaind.set(rate);

lastTime = now;

}

int value = remaind.get();

boolean flag = false;

while (value > 0 && !flag) {

flag = remaind.compareAndSet(value, value - 1);

value = remaind.get();

}

return flag;

}

}

2.基于并发访问的限流 即并发数不能超过阈值 这个记得在finally中要release资源

package com.multiplyzero.mz.core.rpc;

import java.util.concurrent.Semaphore;

/**

*

* ExecuteRateLimiter

*

* @author xy.z@qq.com

*

* @since 2018年11月16日 上午10:11:23

*/

public class ExecuteRateLimiter {

private Semaphore rate;

public ExecuteRateLimiter(int rate) {

this.rate = new Semaphore(rate);

}

public boolean allowable() {

boolean allowable = rate.tryAcquire(1);

return allowable;

}

public void release() {

rate.release(1);

}

}

java limit_简单的限流 java实现 RateLimiter相关推荐

  1. Java并发:分布式应用限流 Redis + Lua 实践

    任何限流都不是漫无目的的,也不是一个开关就可以解决的问题,常用的限流算法有:令牌桶,漏桶.在之前的文章中,也讲到过,但是那是基于单机场景来写. 之前文章:接口限流算法:漏桶算法&令牌桶算法 然 ...

  2. java队列实现限流,java中应对高并发的两种策略

    目的:提高可用性 通过ExecutorService实现队列泄洪 //含有20个线程的线程池 private ExecutorService executorService = Executors.n ...

  3. 【开发经验】java代码中实现限流

    限流目的 限流的目的是防止恶意请求流量.恶意攻击.或者防止流量超过系统峰值. 流量达到峰值时,会有一个熔断策略,常见的熔断策略: 直接拒绝请求,跳转到一个"服务器出小差"页面 排队 ...

  4. Java中常用的限流算法

    在Java的系统中,在一些活动日或者是被黑客攻击,导致访问量突然暴增,系统承受不了巨大的流量冲击而崩溃.为了保护我们的系统,在实际开发中有四种常见的限流算法来保证系统的安全性. 1 固定窗口算法 固定 ...

  5. java guava限流,Guava的RateLimiter实现接口限流

    最近开发需求中有需要对后台接口进行限流处理,整理了一下基本使用方法. 首先添加guava依赖: com.google.guava guava 23.0 然后封装RateLimiter适用对多接口的限制 ...

  6. Java自定义注解-请求限流/防刷

    兄弟们,相信遇到过重复请求的痛点吧,我也遇过,因此,写了一个自定义注解去解决这个问题,接下来看代码. 首先:创建一个自定义注解 RequestLimit .然后字段的话是 second.maxCoun ...

  7. java中常见的限流算法详细解析

    目录 前言 1. 验证限流以及容器限流 2. 服务端限流 2.1 固定时间窗口 2.2 滑动时间窗口 2.3 漏桶算法 2.4 令牌桶算法 前言 以下的文章参考了一些具体的资料加深了解 B站:Java ...

  8. Java 文件下载/上传限流算法

    文章目录 一.算法思路 二.限流的完整java代码实现 三.注意点 四.具体demo的github地址 在做文件下载功能时,为了避免下载功能将服务器的带宽打满,从而影响服务器的其他服务.我们可以设计一 ...

  9. 【229期】Spring Boot 使用令牌桶算法+拦截器+自定义注解+自定义异常实现简单的限流...

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每天 08:15 更新文章,每天进步一点点... ...

最新文章

  1. 普通人也能用AI拍出3D大片?这位清华博士后这么做
  2. Java并发编程:JMM和volatile关键字
  3. python gzip压缩后传给前端_Python 3,从/向gzip文件读取/写入压缩的json对象
  4. C++中的位运算和|
  5. JS魔法堂:判断节点位置关系
  6. 最优化学习笔记(五)牛顿法及拟牛顿法
  7. springMVC从上传的Excel文件中读取数据
  8. mfc连接mysql增删改查_java实现mysql数据库增删改查
  9. 记一次mysql千万订单汇总查询优化
  10. Python将矩阵格式数据在Console全部显示
  11. python json转对象
  12. Mac book Pro BootCamp驱动下载地址
  13. android 字符串 转json,Android将字符串转换为JSON
  14. DSP与广告位之间的关系
  15. web前端(1)——了解什么是前端,以及与后端的关系
  16. Python语言程序设计基础 第二版(嵩天著)课后答案第四章
  17. 【人工智能】— 不确定性、先验概率/后验概率、概率密度、贝叶斯法则、朴素贝叶斯 、最大似然估计
  18. Java:用递归计算n!
  19. map的嵌套使用方法
  20. Oracle:数据库备份之exp与imp的使用(切记,不能在plsql或sqlplus中使用)

热门文章

  1. 模仿搜索框搜索提示案例笔记分享
  2. Unicode研究之Python将Unihan_Readings.txt转化为SQLite数据库
  3. 2021年煤气考试报名及煤气考试APP
  4. 小数为何叫成浮点数 ?
  5. js观察者模式on、emit、off、once实现
  6. 弃IBM持苹果,股神巴菲特眼中的科技迭代
  7. 我的“狡兔三窟”成长计划
  8. Radmin通过互联网联机
  9. Android 11 中访问 Android/data 目录的几种方式
  10. 计算机网络组成原理实验,计算机组成原理实验教程