学习小记-使用Redis的令牌桶算法实现分布式限流
在介绍令牌桶算法前先介绍一下漏桶算法(Leaky Bucket)
漏桶算法(Leaky Bucket)
漏桶算法是一种固定容量的容器模型,它通过控制数据流入和流出的速度来限制数据的传输速率。漏桶算法的主要特点包括:
- 固定容量:漏桶的容量是固定的,一旦桶满,多余的数据将被丢弃或拒绝。
- 持续泄露:桶中的“水”(数据)以固定速率持续流出。
- 突发处理:可以在桶未满时快速处理突发流量,但一旦桶满,流量将被限制。
Redisson 本身没有直接提供漏桶算法(Leaky Bucket)的实现,如果你需要在 Redisson 中实现漏桶算法,可以考虑以下步骤:
-
使用 sorted set 存储令牌:在 Redis 中使用 sorted set 存储令牌,每个令牌都有一个时间戳作为分数(score)。
-
添加令牌:以固定的时间间隔向 sorted set 中添加令牌,每个令牌的分数是添加时的时间戳。(可以用定时任务添加)
-
获取令牌:当需要发送请求时,从 sorted set 中移除(或弹出)一个令牌,并检查当前时间是否大于令牌的时间戳加上一个允许的最大延迟。
-
丢弃令牌:如果当前时间超过了令牌的时间戳加上最大延迟,则丢弃该令牌,模拟“漏水”。
-
限流逻辑:如果 sorted set 中没有可用的令牌,则拒绝请求或将其放入等待队列。
令牌桶算法(Token Bucket)
令牌桶算法是一种更加灵活的流量控制算法,它通过生成令牌(Tokens)来允许数据以一定速率发送。令牌桶算法的主要特点包括:
- 令牌生成:以固定速率在桶中生成令牌。
- 令牌使用:发送数据时需要消耗桶中的令牌,如果没有足够的令牌,数据发送将被延迟或丢弃。
- 突发能力:可以在令牌充足时发送较大流量,之后流量将根据令牌生成速率受到限制。
Redisson 框架提供了基于令牌桶算法的限流功能,可以通过 RRateLimiter 接口实现。以下是 Redisson 中使用令牌桶算法的一个简单示例:
import org.redisson.api.RRateLimiter;
import org.redisson.api.RedissonClient;// 假设redissonClient已经创建并配置好连接
RRateLimiter rateLimiter = redissonClient.getRateLimiter("myRateLimiter");// 配置令牌桶参数
rateLimiter.trySetRate(20, RateType.OVERALL); // 总共可以处理20个请求
rateLimiter.trySetRate(1, RateIntervalUnit.SECONDS); // 每秒生成1个令牌// 尝试获取一个令牌,如果成功,返回true,否则返回false
boolean acquired = rateLimiter.tryAcquire();// 使用令牌执行操作
if (acquired) {// 执行受限操作
} else {// 处理限流逻辑,例如重试或等待
}// 关闭Redisson客户端
redissonClient.shutdown();
相关文章:
学习小记-使用Redis的令牌桶算法实现分布式限流
在介绍令牌桶算法前先介绍一下漏桶算法(Leaky Bucket) 漏桶算法(Leaky Bucket) 漏桶算法是一种固定容量的容器模型,它通过控制数据流入和流出的速度来限制数据的传输速率。漏桶算法的主要特点包括: 固定…...
electron + express 实现 vue 项目客户端部署
写在前面 作为一个前端程序员,如何实现从前端到客户端的跨越,可能是一个很难实现的事。但客户需求千奇百怪,偶尔遇到一个非要客户端的,如何应对? 那Electron可能真是你福音。具体它有哪些功能,可自行官网…...
千万慎投!自引率高达93%!这16本On hold正处于高危状态,无法检索,剔除岌岌可危中!近四年镇压期刊“出狱”情况一览
本周投稿推荐 SCI • 能源科学类,1.5-2.0(25天来稿即录) • CCF推荐,4.5-5.0(2天见刊) • 生物医学制药类(2天逢投必中) EI • 各领域沾边均可(2天录用)…...
【数据结构】排序——快速排序
前言 本篇博客我们继续介绍一种排序——快速排序,让我们看看快速排序是怎么实现的 💓 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 若有问题 评论区见📝 🎉欢迎大家点赞👍收藏⭐文章 目录 …...
Matlab 怎么查找矩阵中所有0的数据并赋值
index find(X40); X4(index)57.71527;...
开发一个HTTP模块
开发一个HTTP模块 HTTP模块的数据结构ngx_module_t模块的数据结构ngx_http_module_t数据结构ngx_command_s 数据结构 定义一个HTTP模块处理用户请求返回值获取URI和参数方法名URIURL协议版本 获取HTTP头获取HTTP包体 发送响应发送HTTP头发送内存中的字符串作为包体返回一个Hell…...
vue2实现复制,粘贴功能,使用vue-clipboard2插件
一、需求说明 在项目中 点击按钮 复制 某行文本是很常见的 应用场景, 在 Vue 项目中实现 复制功能 需要借助 vue-clipboard2 插件。 二、代码实现 1、安装 vue-clipboard2 依赖 ( 出现错误的话,可以试试切换成淘宝镜像源 npm config set r…...
【软件测试】 1+X初级 功能测试试题
【软件测试】 1X初级 功能测试试题 普通员工登录系统,在“个人信息维护”模块,可以查看和维护个人信息。个人信息维护需求包括用户(UI)页面、业务规则两部分。 UI 界面 个人信息维护 修改基本信息 业务规则 1. 个人信息维护页面…...
zynq启动和程序固化流程
普通FPGA启动 FPGA的启动方式主要包含主动模式、被动模式和JTAG模式。 主动模式(AS模式) 当FPGA器件上电时,它作为控制器从配置器件EPCS中主动发出读取数据信号,并将EPCS的数据读入到自身中,实现对FPGA的编程。这种…...
CSS3实现彩色变形爱心动画【附源码】
随着前端技术的发展,CSS3 为我们提供了丰富的动画效果,使得网页设计更加生动和有趣。今天,我们将探讨如何使用 CSS3 实现一个彩色变形爱心加载动画特效。这种动画不仅美观,而且可以应用于各种网页元素,比如加载指示器或…...
【JVM基础篇】Java的四种垃圾回收算法介绍
文章目录 垃圾回收算法垃圾回收算法的历史和分类垃圾回收算法的评价标准标记清除算法优缺点 复制算法优缺点 标记整理算法(标记压缩算法)优缺点 分代垃圾回收算法(常用)JVM参数设置使用Arthas查看内存分区垃圾回收执行流程分代GC算…...
Kodcloud可道云安装与一键发布上线实现远程访问详细教程
文章目录 1.前言2. Kodcloud网站搭建2.1. Kodcloud下载和安装2.2 Kodcloud网页测试 3. cpolar内网穿透的安装和注册4. 本地网页发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6.结语 1.前言 本文主要为大家介绍一款国人自研的在线Web文件管理器可道云,…...
python杨辉三角的两种书写方式
第一种(设置二维列表设置每个元素为0进行替换元素) 代码演示: n eval(input("请输入想要的行数")) lst[[0 for j in range(n)] for i in range(n)] # lst2[[0]*n]*n for i in range(n):for j in range(i1):if j0 or ji:lst[i][j…...
【CSS in Depth 2精译】2.5 无单位的数值与行高
当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高 ✔️2.6 自定义属性2.7 本章小结 2.5 无单位的数值与行高 有些属性允许使用无单位的数值(unitless value…...
【人脸识别、Python实现】PyQt5人脸识别管理系统
PyQt5人脸识别管理系统 项目描述主要功能效果展示获取源码 项目描述 接的一个基于宿舍管理系统与人脸识别的小单子。然后我把它优化了一些,现在开源一下。有需要的小伙伴自取,点个免费的关注就行 主要功能 1、录入学生基本信息、录入人脸 2、主页面展…...
软设之观察者模式
设计模式中,观察者模式的意图是:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 比如说,有一个新闻网站,订阅的用户众多,假如说管理员发布了一…...
deep learning 环境配置
1 NVIDIA驱动安装 ref link: https://blog.csdn.net/weixin_37926734/article/details/123033286 2 cuda安装 ref link: https://blog.csdn.net/qq_63379469/article/details/123319269 进去网站 https://developer.nvidia.com/cuda-toolkit-archive 选择想要安装的cuda版…...
09磁盘管理
一、磁盘管理 1.磁盘基础知识 (1)磁盘接口类型 个人电脑, 硬盘接口分为IDE类型和SATA类型 服务器版分为SCSI类型和SAS类型 (2)磁盘命名方式 windows中硬盘命名方式是c,d,e盘 linux中硬盘命名方式为 系统…...
Node.js Stream
Node.js Stream Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者使用 JavaScript 编写服务器端代码。Node.js 的一个核心特性是其对流(Stream)的处理能力。流是一种在 Node.js 中处理读/写文件、网络通信或任何端到端…...
简化嵌入式Linux开发:在Ubuntu上安装和配置交叉编译环境的高效方法
在嵌入式Linux开发中,我们通常需要在Ubuntu上安装交叉编译工具链,并配置相关文件。编译过程中,如果遇到依赖库问题,还需要手动查找并编译开源源码。这些步骤较为繁琐,为了简化操作,我们可以尝试以下方案&am…...
FunASR语音识别镜像亲测:支持中英日韩粤语,一键生成字幕和文本
FunASR语音识别镜像亲测:支持中英日韩粤语,一键生成字幕和文本 1. 引言 1.1 为什么选择FunASR 作为一名长期关注语音技术的开发者,我一直在寻找一个既强大又易用的语音识别解决方案。FunASR作为阿里达摩院开源的语音识别工具包,…...
HS2-HF Patch汉化补丁:3分钟实现Honey Select 2游戏完全汉化
HS2-HF Patch汉化补丁:3分钟实现Honey Select 2游戏完全汉化 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 如果你正在寻找一款能够彻底解决Honey …...
终极多店铺管理指南:如何在Fecshop中轻松运营多个独立商城
终极多店铺管理指南:如何在Fecshop中轻松运营多个独立商城 【免费下载链接】yii2_fecshop Yii2_fecshop是一个基于Yii2框架的电商系统,适合用于搭建在线商城、B2C网站等。特点:功能丰富、易于扩展、支持多种支付方式。 项目地址: https://g…...
CMake: target_include_directories、target_compile_definitions、target_link_libraries 详解
CMake:target_include_directories、target_compile_definitions、target_link_libraries 详解 目录 概述一、PRIVATE / PUBLIC / INTERFACE 作用域二、传递机制与依赖方向(示意)三、target_include_directories四、target_compile_definit…...
GLM-OCR效果展示:复杂版式、表格、公式识别案例全解析
GLM-OCR效果展示:复杂版式、表格、公式识别案例全解析 1. 专业级OCR的新标杆 在文档数字化处理领域,传统OCR技术往往在遇到复杂版式、数学公式或嵌套表格时束手无策。GLM-OCR的出现彻底改变了这一局面——这个轻量级多模态OCR模型在权威文档解析基准测…...
OpenClaw学术助手:千问3.5-27B自动校对论文格式与参考文献
OpenClaw学术助手:千问3.5-27B自动校对论文格式与参考文献 1. 为什么需要自动化论文校对工具 作为科研工作者,我经历过无数次论文投稿前的格式调整噩梦。记得去年投稿某核心期刊时,光是调整参考文献格式就花了整整两天——期刊要求APA第六版…...
在github上部署个人的vitepress文档网站
我开发的BMapViewer组件正式上线了,文档使用了vitepress搭建编写,使用github Pages进行部署,现在可以正常访问了,接下来我会完整的写一遍网站部署过程。 我的文档网站:https://banyan666.github.io/BMapViewer-docs/ …...
手把手教你用NLI-DistilRoBERTa-Base:快速搭建自然语言推理服务
手把手教你用NLI-DistilRoBERTa-Base:快速搭建自然语言推理服务 1. 引言:什么是自然语言推理(NLI) 自然语言推理(Natural Language Inference)是NLP领域的一项重要任务,它需要判断两个句子之间的关系。想象一下,当你在阅读一段文…...
如何用PeerDB构建企业级数据管道:从配置到监控的完整教程
如何用PeerDB构建企业级数据管道:从配置到监控的完整教程 【免费下载链接】peerdb Fast, Simple and a cost effective tool to replicate data from Postgres to Data Warehouses, Queues and Storage 项目地址: https://gitcode.com/gh_mirrors/pe/peerdb …...
单片机与手机远距离通信技术方案全解析
1. 单片机与手机远距离通信的技术方案解析在物联网和智能硬件开发领域,单片机与手机的远程通信是一个基础但至关重要的技术需求。作为一名嵌入式开发工程师,我参与过多个需要远程通信的智能硬件项目,从智能家居设备到工业监测终端,…...
