限流算法之计数器法

news2024/12/25 12:21:34

文章目录

  • 一、计数器法是什么?
  • 二、模拟限流算法
    • java版
    • 效果


一、计数器法是什么?

计数器法是限流算法里最简单也是最容易实现的一种算法。
比如:对于一个接口来说,我们1分钟的访问次数不能超过100个。那么我们可以这么做:在一开始的时候,我们可以设置一个counter(计数器),每当一个请求过来的时候,counter就加1,如果counter的值大于100并且该请求与第一个 请求的间隔时间还在1分钟之内,那么说明请求数过多;如果该请求与第一个请求的间隔时间大于1分钟,且counter的值还在限流范围内,那么就重置 counter。

在这里插入图片描述

二、模拟限流算法

java版

代码如下(示例):

import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author yang
 * @date 2024/1/10 15:53
 */
public class RateLimiter {
    /**
     * 最大请求数
     */
    private static final int MAX_REQUESTS = 100;
    /**
     * 时间窗口大小,1秒
     */
    private static final long INTERVAL_MILLIS = 1000;
    private final AtomicInteger count = new AtomicInteger(0);
    private long windowStart = System.currentTimeMillis();

    public boolean allowRequest() {
        long now = System.currentTimeMillis();
        if (now - windowStart > INTERVAL_MILLIS) {
            // 如果超过了时间窗口,则重置计数器和时间窗口起始时间
            count.set(1);
            windowStart = now;
            return true;
        } else {
            if (count.get() < MAX_REQUESTS) {
                // 如果未超过最大请求数,则允许该请求,并增加计数器
                count.incrementAndGet();
                return true;
            } else {
                // 否则拒绝该请求
                return false;
            }
        }
    }

    public static void main(String[] args) {
        RateLimiter limiter = new RateLimiter();
        for (int i = 0; i < 110; i++) {
            if (limiter.allowRequest()) {
                System.out.println("允许请求");
            } else {
                System.out.println("限流");
            }
        }
    }
}

效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1374137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大话 JavaScript(Speaking JavaScript):第二十一章到第二十五章

第二十一章&#xff1a;数学 原文&#xff1a;21. Math 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 Math对象用作多个数学函数的命名空间。本章提供了一个概述。 数学属性 Math的属性如下&#xff1a; Math.E 欧拉常数&#xff08;e&#xff09; Math.LN2 2 …

论文阅读《Generalizing Face Forgery Detection with High-frequency Features》

高频噪声分析会过滤掉图像的颜色内容信息。 本文设计了三个模块来充分利用高频特征&#xff0c; 1.多尺度高频特征提取模块 2.双跨模态注意模块 3.残差引导空间注意模块&#xff08;也在一定程度上体现了两个模态的交互&#xff09; SRM是用于过滤图像的高频噪声 输入的图…

韩语干货-TOPIK韩语初级必备词汇|柯桥外语学校-小语种考级培训

물【名】水 좋다【形】好 나쁘다【形】坏&#xff0c;不好 맛있다【形】好吃 맛없다【形】不好吃&#xff0c;难吃 책【名】书 없다【形/动】没有/不在 있다【形/动】有&#xff0c;在 읽다【动】读 많다【形】多 적다【形】少 좋아하다【动】喜欢 싫다【形】讨厌 구두…

AI人工智能虚拟数字人行业运用那些领域较广?

AI人工智能虚拟数字人行业是一种新兴的技术应用领域&#xff0c;近年来得到了快速发展。据统计数据显示&#xff0c;该行业的市场规模逐年扩大&#xff0c;投资前景广阔。 首先&#xff0c;我们可以从技术创新的角度来分析AI人工智能虚拟数字人行业的发展情况。随着人工智能技…

已设定选项 ‘readonly‘ (请加 ! 强制执行)

这是vim编辑器报的错误&#xff0c;相信很多人都遇到过。在使用vi编辑一个需要sudo权限的文件后&#xff0c;保存的时候出现这样的错误。这个时候很多人做的事情可能就是不保存退出&#xff08;敲命令:q!&#xff09;&#xff0c;然后再以sudo vi打开文件重新编辑一次。如果恰巧…

STL标准库与泛型编程(侯捷)笔记5

STL标准库与泛型编程&#xff08;侯捷&#xff09; 本文是学习笔记&#xff0c;仅供个人学习使用。如有侵权&#xff0c;请联系删除。 参考链接 Youbute: 侯捷-STL标准库与泛型编程 B站: 侯捷 - STL Github:STL源码剖析中源码 https://github.com/SilverMaple/STLSourceCo…

Unity Delaunay三角剖分算法 动态生成

Unity Delaunay三角剖分算法 动态生成 Delaunay三角剖分Delaunay三角剖分 定义Delaunay 边Delaunay 空圆特性 Delaunay 三角形Delaunay 最大化最小角特性 Delaunay 三角形特征Delaunay 算法Delaunay Lawson算法Delaunay Bowyer-Watson算法 Unity Delaunay三角剖分 应用Unity 工…

【软件测试】刚入行的测试人,“我“该怎么提升自己技术能力...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 一个问题&#xf…

The Planets:Earth

靶机下载 The Planets: Earth ~ VulnHub 信息收集 # nmap -sn 192.168.1.0/24 -oN live.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-11 09:20 CST Nmap scan report for 192.168.1.1 Host is up (0.00036s latency). MAC Address: …

1872_S32K344 MCU基本信息了解

全部学习汇总&#xff1a; GreyZhang/g_s32k344: A new MCU learning notes. I would try to use MCAL instead of SDK. (github.com) 以下的摘录信息来自&#xff1a; S32K Auto General-Purpose MCUs | NXP Semiconductors 安全等级可以到ASIL D。 M7的内核&#xff0c;主频可…

黑暗酷炫风:Pyqt5打造的YOLOv5暗绿蓝调GUI - 非第三方组件库

基于YOLOv5的道路标志识别项目&#xff08;yolov5界面GUI&#xff09; English | 简体中文 这是一个关于yolov5的道路标志识别项目&#xff0c;使用Pyqt5开发界面&#xff0c;Yolov5训练模型&#xff0c;数据库Mysql&#xff0c;包含五个模块&#xff1a;初始化参数、标志识别…

ROS Gazebo仿真 实例演示

实现流程: 1、编写封装惯性矩阵算法的 xacro 文件 2、机器人模型中的每一个 link 添加 collision 和 inertial 标签&#xff0c;并且重置颜色属性 3、在 launch 文件中启动 gazebo 并添加机器人模型 其中的launch文件主要做了两项工作&#xff1a; &#xff08;1&#xff0…

1.10号io网络

信号量&#xff08;信号灯集&#xff09; 1> 信号灯集主要完成进程间同步工作&#xff0c;将多个信号灯&#xff0c;放在一个信号灯集中&#xff0c;每个信号灯控制一个进程 2> 每个灯维护了一个value值&#xff0c;当value值等于0时&#xff0c;申请该资源的进程处于阻…

2024不容错过的好项目好商机,普通人翻身就靠它了,靠谱创业项目推荐

2024什么最容易挣钱&#xff1f;是火遍全网的单身经济&#xff1f;宠物经济&#xff1f;旅游业&#xff1f;大健康经济&#xff1f;都不是&#xff01;他们确实挣钱&#xff0c;但都不是最容易的。 比如单身经济&#xff0c;卖东西你需要去结合需求去选品&#xff0c;开单身餐厅…

尊嘟假嘟?三行代码提升接口性能600倍

一、背景 业务在群里反馈编辑结算单时有些账单明细查不出来&#xff0c;但是新建结算单可以&#xff0c;我第一反应是去测试环境试试有没有该问题&#xff0c;结果发现没任何问题&#xff01;&#xff01;&#xff01; 然后我登录生产环境编辑业务反馈有问题的结算单&#xff…

工单系统:助力传统服务行业实现数字化转型的关键要素

数字化转型的浪潮冲击着传统服务业&#xff0c;对其造成了巨大的影响。其中&#xff0c;工单系统以其多样和强大的功能性&#xff0c;成为传统服务行业必备的数字工具。今天&#xff0c;小编就来大家来聊聊工单系统对传统服务行业有哪些影响&#xff1f;希望对于还未投入使用的…

数据库基础5

基本连接语句 法1 maven 教程 https://www.bilibili.com/video/BV1pw41147jm 导jar包 https://blog.csdn.net/qq_40893824/article/details/129118784 import java.sql.*;public class test {public static void main(String[] args) throws SQLException {//用户信息和url…

ChatGPT诞生对全球高等教育所产生的巨大影响

作为全新的人工智能&#xff08;AI&#xff09;语言模型&#xff0c;ChatGPT诞生于2022年11月30日。目前&#xff0c;虽然其尚处于试运行阶段&#xff0c;但已经产生了极为震撼的影响。 1月28日&#xff0c;美国“内幕”网站发表文章称&#xff0c;“ChatGPT才出现两个月&#…

Zookeeper 和 naocs的区别

Nacos 和 ZooKeeper 都是服务发现和配置管理的工具&#xff0c;它们的主要区别如下&#xff1a;功能特性&#xff1a;Nacos 比 ZooKeeper 更加强大&#xff0c;Nacos 支持服务发现、动态配置、流量管理、服务治理、分布式事务等功能&#xff0c;而 ZooKeeper 主要用于分布式协调…

单片机原理及应用:定时器与计数器中断

时间概念 中断结构 引脚 TCON TMOD IE IP 时间概念 在一般单片机中&#xff0c;有2个16位可编程的硬件计数模块T0和T1&#xff0c;我们称其为计数器或定时器&#xff0c;顾名思义&#xff0c;该模块可以实现定时和计数两种功能&#xff0c;其功能由软件控制和切换。实质…