RateLimiter限流
限流算法
https://blog.csdn.net/sinat_32502451/article/details/139223748
注意:
RateLimiter限流属于单体版的限流,如果是高并发的分布式系统,需要用分布式限流。
Maven依赖包:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
RateLimiter限流
- RateLimiter初始化:
RateLimiter limiter = RateLimiter.create(5);
- RateLimiter令牌桶的方法:
create():每秒创建多少令牌;
acquire():获取一个令牌;
acquire(int permits):获取指定个数的令牌;
tryacquire():尝试获取令牌;
tryacquire():尝试获取一个令牌,如果获取不到立即返回;
tryacquire(int permits, long timeout, TimeUnit unit):尝试获取permits个令牌,如果获取不到等待timeout时间;
示例:
public static void runRateLimiter() {
Long start = System.currentTimeMillis();
// 每秒产生10个令牌,也就是说每秒最多执行10个任务
RateLimiter limiter = RateLimiter.create(10);
for(int i = 1; i < 100; i ++ ) {
// 请求RateLimiter, 超过permits(也就是create方法的参数,比如上面的10)会被阻塞,然后等待获取令牌
limiter.acquire();
System.out.println("acquire:" + i );
}
Long end = System.currentTimeMillis();
System.out.println("限流后总耗时:" + (end - start));
}
参考资料:
https://www.iteye.com/blog/jinnianshilongnian-2305117
https://www.jianshu.com/p/5d4fe4b2a726
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了