Java 常用限流算法解析

Java 常用限流算法解析前言限流作为高并发场景下抵挡流量洪峰 保护后端服务不被冲垮的一种有效手段 比如大家熟知的限流组件 guawa springcloud 中的 Hystrix 以及 springcloud alibaba 生态中的 Sentinel 甚至是基于网关的限流 比如在 nginx 中配置限流策略 在 gateway 中配置限流策略等限流无处不在 既然限流的作用如此强大 那么其底层的实现原理如何呢 说到底 限流的核心是由一系列不同的算法完成 本篇将通过实例来说明下常用的几种限流算法的用法和原理 1 计数器算法计数器算法限流是采用简单

前言

限流作为高并发场景下抵挡流量洪峰,保护后端服务不被冲垮的一种有效手段,比如大家熟知的限流组件guawa,springcloud中的Hystrix,以及springcloud-alibaba生态中的Sentinel,甚至是基于网关的限流,比如在nginx中配置限流策略,在gateway中配置限流策略等

限流无处不在,既然限流的作用如此强大,那么其底层的实现原理如何呢,说到底,限流的核心是由一系列不同的算法完成,本篇将通过实例来说明下常用的几种限流算法的用法和原理

1、计数器算法

计数器算法限流是采用简单的计数操作,到一段时间之后自动清零,通俗来说,就是系统允许的最大流量是固定的,每过来一个请求分发一个数量的资源处理请求,一旦某个时间段,这批用于处理请求的资源达到了最大值,后续再过来的请求就直接没法处理了

为了模拟计数器的效果,这里我们使用Java中的Semaphore,对Semaphore有过了解的同学应该直到,这个组件可以搭配线程一起使用,可以对并发线程进行处理,

可以理解Semaphore就是一个令牌发放的人员,所有过来的请求都必须从Semaphore中拿到一个资源(线程),拿到资源的请求才能被处理

/ * 计数器限流算法 */ public class Counter { public static void main(String[] args) { final Semaphore semaphore = new Semaphore(3); ScheduledExecutorService service = Executors.n
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234012.html原文链接:https://javaforall.net

(0)
上一篇 2025年6月3日 上午8:01
下一篇 2025年6月3日 上午8:22


相关推荐

  • 手把手教你用AnythingLLM搭建本地DeepSeek知识库,小白也能搞定(附教程)

    手把手教你用AnythingLLM搭建本地DeepSeek知识库,小白也能搞定(附教程)

    2026年3月16日
    4
  • ACM中Java输入输出[通俗易懂]

    ACM中Java输入输出[通俗易懂]最初写算法时,是用Scanner的。因为当时接触的测试数据基本都是以算法的复杂度为主,但是后面遇到大量的输入数据时。发现Scanner远远不能满足条件。下面列出几种常用的输入输出方式。(输出统一用printwriter,系统的system.out太慢,结尾要释放缓存才能输出,不然数据放在缓存中输不出来)1:Scanner这个类最慢,但是最好用,因为这个类没有缓存处理,所以io方面大量输入…

    2022年5月18日
    47
  • ubuntu 小技巧

    ubuntu 小技巧

    2021年4月29日
    259
  • java mvel_什么是MVEL?

    java mvel_什么是MVEL?1 MVEL 是啥 它能做啥 简单来说是一种强大的表达式解析器 我们可以自己写一些表达式 交给 mvel 进行解析计算 得到这个表达式计算的值 玩概念 我不懂 还是举个例子靠谱 比如我们要进行一个加法运算 在 java 中我们这样写 intres 1 1 2 若我用 mvel 则这样写 Objectres MVEL eval 1 1 2 是不是很吃惊 1 1 就是一个表达

    2026年3月18日
    2
  • Windows 更新错误 8024401C -解决方法之一

    Windows 更新错误 8024401C -解决方法之一1.  按“Windows+X”打开命令提示符管理员,输入“netstopwuauserv”。2.  打开C:\Windows,重命名SoftwareDistribution文件夹为SDold。3.  按“Windows+X”打开命令提示符管理员,输入“netstartwuauserv”。不一定管用。。。。

    2022年4月28日
    65
  • findindex方法_find函数怎么用

    findindex方法_find函数怎么用findIndex(fn)方法:(注意:1.不需要return2.参数fn就是检索条件)返回在数组中查找符合条件第一个元素的index索引。vararr=[12,16,18,20]letindex=arr.findindex((item)=>{ item>=18})//打印index为2…

    2025年6月25日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号