java limit_简单的限流 java实现 RateLimiter
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相关推荐
- Java并发:分布式应用限流 Redis + Lua 实践
任何限流都不是漫无目的的,也不是一个开关就可以解决的问题,常用的限流算法有:令牌桶,漏桶.在之前的文章中,也讲到过,但是那是基于单机场景来写. 之前文章:接口限流算法:漏桶算法&令牌桶算法 然 ...
- java队列实现限流,java中应对高并发的两种策略
目的:提高可用性 通过ExecutorService实现队列泄洪 //含有20个线程的线程池 private ExecutorService executorService = Executors.n ...
- 【开发经验】java代码中实现限流
限流目的 限流的目的是防止恶意请求流量.恶意攻击.或者防止流量超过系统峰值. 流量达到峰值时,会有一个熔断策略,常见的熔断策略: 直接拒绝请求,跳转到一个"服务器出小差"页面 排队 ...
- Java中常用的限流算法
在Java的系统中,在一些活动日或者是被黑客攻击,导致访问量突然暴增,系统承受不了巨大的流量冲击而崩溃.为了保护我们的系统,在实际开发中有四种常见的限流算法来保证系统的安全性. 1 固定窗口算法 固定 ...
- java guava限流,Guava的RateLimiter实现接口限流
最近开发需求中有需要对后台接口进行限流处理,整理了一下基本使用方法. 首先添加guava依赖: com.google.guava guava 23.0 然后封装RateLimiter适用对多接口的限制 ...
- Java自定义注解-请求限流/防刷
兄弟们,相信遇到过重复请求的痛点吧,我也遇过,因此,写了一个自定义注解去解决这个问题,接下来看代码. 首先:创建一个自定义注解 RequestLimit .然后字段的话是 second.maxCoun ...
- java中常见的限流算法详细解析
目录 前言 1. 验证限流以及容器限流 2. 服务端限流 2.1 固定时间窗口 2.2 滑动时间窗口 2.3 漏桶算法 2.4 令牌桶算法 前言 以下的文章参考了一些具体的资料加深了解 B站:Java ...
- Java 文件下载/上传限流算法
文章目录 一.算法思路 二.限流的完整java代码实现 三.注意点 四.具体demo的github地址 在做文件下载功能时,为了避免下载功能将服务器的带宽打满,从而影响服务器的其他服务.我们可以设计一 ...
- 【229期】Spring Boot 使用令牌桶算法+拦截器+自定义注解+自定义异常实现简单的限流...
点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每天 08:15 更新文章,每天进步一点点... ...
最新文章
- 普通人也能用AI拍出3D大片?这位清华博士后这么做
- Java并发编程:JMM和volatile关键字
- python gzip压缩后传给前端_Python 3,从/向gzip文件读取/写入压缩的json对象
- C++中的位运算和|
- JS魔法堂:判断节点位置关系
- 最优化学习笔记(五)牛顿法及拟牛顿法
- springMVC从上传的Excel文件中读取数据
- mfc连接mysql增删改查_java实现mysql数据库增删改查
- 记一次mysql千万订单汇总查询优化
- Python将矩阵格式数据在Console全部显示
- python json转对象
- Mac book Pro BootCamp驱动下载地址
- android 字符串 转json,Android将字符串转换为JSON
- DSP与广告位之间的关系
- web前端(1)——了解什么是前端,以及与后端的关系
- Python语言程序设计基础 第二版(嵩天著)课后答案第四章
- 【人工智能】— 不确定性、先验概率/后验概率、概率密度、贝叶斯法则、朴素贝叶斯 、最大似然估计
- Java:用递归计算n!
- map的嵌套使用方法
- Oracle:数据库备份之exp与imp的使用(切记,不能在plsql或sqlplus中使用)