分布式限流:Redis
目录
1:如何实现分布式限流
2:限流的几种类别
2.1:固定窗口限流
2.2:滑动窗口限流
2.3:漏桶限流
2.4:令牌桶限流
3:实现分布式限流:Redis
3.1:引入Redisson的依赖包
3.2:初始化Redisson
3.3:创建Redisson的限流类
1:如何实现分布式限流
1:把统计用户的使用频率等这些数据放到一个集中的存储,比如redis,这样无论用户的请求落在了哪台服务器,都以集中存储的数据为准。(Redis)
2:限流的几种类别
2.1:固定窗口限流
单位时间内,允许部分操作。 1小时,只允许10个用户操作。
优点:最简单
缺点:可能出现流量突刺
eg:前59分钟,第59分钟来了十个操作。第一小时01分钟又来了十个操作,就可能导致流量突刺,相当于2分钟实现了20个操作。
2.2:滑动窗口限流
单位时间内,允许部分操作,但是这个时间是滑动的 需要指定滑动单位
滑动单位: 1min
开始前:
0s 1h 2h
一分钟:
1min 1h1min
优点;能够解决上面流量突刺的问题,第59分钟,限流窗口59min到1h59min,这个时间段内接受10次请求,只要在这个窗口内,更多的操作就会被拒绝。
缺点:实现相对复杂。滑动单位越小,限效果越好。
2.3:漏桶限流
以固定的速率请求,当请求桶满后,拒绝请求。
每秒处理10个请求,桶的容量是10,每0.1秒处理1次请求(固定的),如果1秒内,来了10个都可以处理完,但如果一秒内来了11个请求,最后那个请求就会被拒绝。
优点:能够一定程度上应对流量突刺,能够以固定的速率处理请求,安全性高
缺点:速度是固定的,没有办法处理一批请求,只能一个一个来
2.4:令牌桶限流
管理员先生成一批令牌,每秒生成10个令牌,当用户操作前,先去拿到令牌,有令牌的人可以先执行,都能够同时执行。
优点:能够并发处理同时的请求,并发性高
缺点:时间单位选取的问题。
以上漏桶限流和令牌桶限流最常用。
3:实现分布式限流:Redis

3.1:引入Redisson的依赖包
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.17.5</version></dependency>
3.2:初始化Redisson
@Configuration
@ConfigurationProperties(prefix = "spring.redis")public class RedissonConfig {private Integer database;private String host;private String port;@Beanpublic RedissonClient getRedissonClient(){//配置Redis的配置类Config config=new Config();config.useSingleServer().setDatabase(database).setAddress("redis://"+host+":"+port);RedissonClient redisson= Redisson.create(config);return redisson;}
}
3.3:创建Redisson的限流类
@Service
public class RedisLimiterManage {@Autowiredprivate RedissonClient redissonClient;//key:区分不同的限流器:不同的用户idpublic void doRateLimit(String key){RRateLimiter rateLimiter=redissonClient.getRateLimiter(key);//将所有用户的访问次数放在同一个限流器上,1秒允许两次rateLimiter.trySetRate(RateType.OVERALL,2,1, RateIntervalUnit.SECONDS);//每当一个用户来了之后,请求一个令牌boolean result = rateLimiter.tryAcquire(1);if(!result){throw new BusinessException(ErrorCode.NO_AUTH_ERROR,"请求过于频繁");}}
}

当我们使用分布式限流Redis的时候,只需要让这个RedisLimiterManage调用doRateLimit方法,就可以进行分布式限流的操作。
@Autowiredprivate RedisLimiterManage redisLimiterManage;
//引入依赖//进行限流判断redisLimiterManage.doRateLimit("genChartByAi_"+user.getId());//每个用户的限流器
相关文章:
分布式限流:Redis
目录 1:如何实现分布式限流 2:限流的几种类别 2.1:固定窗口限流 2.2:滑动窗口限流 2.3:漏桶限流 2.4:令牌桶限流 3:实现分布式限流:Redis 3.1:引入Redisson的依赖包 3.2:初始化Redisson 3.3:创建Redisson的限流类 1:如何实现分布式限流 1:把统计用户的使用频率等这些…...
python excel接口自动化测试框架
前言 前些天写了pytestyamlallure接口自动化测试框架这篇文章。 今天采用Excel继续写一个接口自动化测试框架。 设计流程图 这张图是我的excel接口测试框架的一些设计思路。 首先读取excel文件,得到测试信息,然后通过封装的requests方法,…...
Java开发面试--MongoDB专区
1、你是否了解 MongoDB? 答: 是的,我了解 MongoDB。MongoDB是一个流行的NoSQL数据库,它以文档的形式存储数据,具有高度的灵活性和可扩展性。我熟悉MongoDB的基本概念和特性,例如集合(Collectio…...
当『后设学习』碰上『工程学思维』
只要我成为一个废物,就没人能够利用我! 雷猴啊,我是一只临期程序猿。打过几年工,写过几行代码。但今天我不想聊代码,我们聊聊学习这件事。 技术年年更新,尤其是前端框架,很多时候觉得学习速度都…...
一表谈现实、系统、流程、报表与BI
序号主题描述1系统与现实1.1管理系统个体应用决定因素管理能力、软件工程与管理环境的综合结果1.2信息系统与现实业务的关系现实世界是以业务利弊为抓手;信息系统是以业务流程为抓手;信息系统只是对现实业务部分的数字化应用总结:现实业务是以…...
数据结构顺序栈例题一
内容仅供个人复习 #include<iostream> #define MAXSIZE 100using namespace std;typedef struct {int *base;int *top;int stackSize;}SqStack;void Initstack( SqStack &s) // 初始化栈 {s.base new int[MAXSIZE];s.top s.base;s.stackSize MAXSIZE; }void Pus…...
大模型在百度智能问答、搜索中的应用
本文主要介绍了智能问答技术在百度搜索中的应用。包括机器问答的发展历程、生成式问答、百度搜索智能问答应用。欢迎大家加入百度搜索团队,共同探索智能问答技术的发展方向,文末有简历投递方式。 01 什么是机器问答 机器问答,就是让计算机…...
ARPG----C++学习记录01日志和调试
多人射击有点难,发现这个更加基础,先学习这个 显示日志 可以在代码中插入这样一行来打印日志,蓝图里的printstring会在屏幕和日志里都显示。可以使用%f,d等来获取后边的输入值。对于打映字符串变量,传入需要* UE_LOG…...
3302. 表达式求值, 栈的应用
3302. 表达式求值 - AcWing题库 给定一个表达式,其中运算符仅包含 ,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。 注意: 数据保证给定的表达式合法。题目保证符号 - 只作为减号出现&…...
论文写作框架示例:论软件系统建模方法及其应用
标题 前言题目要求写作框架(1)摘要(300~330字)(2)正文(2000~2500字,2200字左右为宜)(3)收尾(200字左右)前言 本章内容参考了51cto的薛老师的《软考论文高分特训与范文10篇》的内容,是帮助初学者打开写作思路的工具,而不是必须要遵循的模式。建议软考人多读多看…...
Godot 官方2D C#重构(4):TileMap进阶使用
文章目录 前言完成内容项目节点结构TileMap设置图片资源备选图片添加物理碰撞添加y轴遮罩判断Y Sort Enable是干什么的? 脚本代码 前言 Godot 官方 教程 Godot 2d 官方案例C#重构 专栏 Godot 2d 重构 github地址 完成内容 项目节点结构 TileMap设置 图片资源 备选图…...
Ubuntu系统编译调试QGIS源码保姆级教程
在之前的文章中,我详细介绍了怎么在Windows下编译QGIS源码,也得到了不错的反馈。但是不足的是Windows下只能编译QGIS的Release模式和RelWithDebInfo模式,想要分析源码,“断点调试”肯定是少不了的,但是这两种模式虽然也…...
电源控制系统架构(PCSA)之系统控制处理器
安全之安全(security)博客目录导读 目录 一、系统控制处理器 1、服务 2、可信操作 一、系统控制处理器 SCP是一种基于处理器的能力,为提供电源管理功能和服务提供了一个灵活和可扩展的平台。 在移动系统中,SCP处理器一般是Cortex-M微控制器ÿ…...
深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
加我微信hezkz17进数字音频系统研究开发交流答疑群(课题组) 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署 项目一 科大讯飞经验 在Matlab平台上实现广义…...
Redis实现方式开启新篇章,解决分布式环境下的资源竞争问题,提升系统稳定性
前言 分布式锁一般有三种实现方式: 数据库乐观锁;基于Redis的分布式锁;基于ZooKeeper的分布式锁 本篇博客将介绍第二种方式,基于Redis实现分布式锁。 虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实…...
Go命令行参数操作:os.Args、flag包
Go命令行参数操作:os.Args、flag包 最近在写项目时,需要用到命令行传入的参数,正好借此机会整理一下。 1 os.Args:程序运行时,携带的参数(包含exe本身) package mainimport ("fmt"&q…...
在Go中处理时间数据
获取时间 这可能是软件包中最常用的方法。我们如何知道当前的时间呢?像这样: t : time.Now() fmt.Println(t)ini复制代码2023-04-16 23:54:45.924965 0800 CST m0.000152293这就是当前的时间。这是很麻烦的,所以我将把它分解成几个部分。 …...
SOLIDWORKS PDM 2024数据管理5大新功能
1. 改进的视觉内容 • 通过装配体可视化功能,在 SOLIDWORKS 中以图形方式查看零部件数据,如工作流程状态。• 使用特定图标迅速识别焊件切割清单零部件。 优点:重要数据和系统信息一目了然。 2.增强的数据保护和跟踪功能 •保护“包含”和…...
5G与医疗:开启医疗技术的新篇章
5G与医疗:开启医疗技术的新篇章 随着5G技术的快速发展和普及,它已经在医疗领域产生了深远的影响。5G技术为医疗行业提供了更高效、更准确、更及时的通信方式,从而改变了医疗服务的模式和患者的体验。本文将探讨5G技术在医疗领域的应用场景、优…...
Linux云服务器限制ip进行ssh远程连接
对Linux云服务器限制IP进行SSH远程连接的原因主要有以下几点: 增加安全性:SSH是一种加密的网络传输协议,可以保护数据的机密性和完整性。通过限制SSH连接的IP地址,可以防止未经授权的访问和数据泄露。只有拥有访问权限的IP地址才…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...
PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
python打卡第47天
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图,展示模…...
Java中HashMap底层原理深度解析:从数据结构到红黑树优化
一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一,是基于哈希表的Map接口非同步实现。它允许使用null键和null值(但只能有一个null键),并且不保证映射顺序的恒久不变。与Hashtable相比,Hash…...
