发布时间:2026/9/6 3:32:07
SpringBoot 分布式令牌桶限流:集成 Bucket4j + Redis SpringBoot 分布式令牌桶限流集成 Bucket4j Redis一、pom.xml版本号Redis 客户端二、Bucket4j 配置三、配置 JedisPool一、pom.xml本文使用的 SpringBoot 版本为 4.0.3JDK 版本为 25以下是集成 Bucket4j 需要引入的相关依赖!-- springboot相关依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aspectj/artifactId/dependency!-- bucket4j的springboot 依赖 --dependencygroupIdcom.giffing.bucket4j.spring.boot.starter/groupIdartifactIdbucket4j-spring-boot-starter/artifactIdversion0.14.0/version/dependency!-- bucket4j的redis-jedis依赖 --dependencygroupIdcom.bucket4j/groupIdartifactIdbucket4j_jdk17-redis-common/artifactIdversion8.15.0/version/dependencydependencygroupIdcom.bucket4j/groupIdartifactIdbucket4j_jdk17-jedis/artifactIdversion8.15.0/version/dependency!-- spring-boot-starter-cache --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId/dependency!-- jedis依赖 --dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactId/dependency版本号bucket4j-spring-boot-starter 以及 bucket4j_jdk17-redis-common、bucket4j_jdk17-jedis 的版本号参考 bucket4j-spring-boot-starter github 文档Redis 客户端大部分 SpringBoot 应用使用的是基于 Servlet 同步阻塞模型的 spring-boot-starter-web 依赖因此在集成 Bucket4j 时必须使用 Redis 的 Jedis 客户端。如果使用的是基于 Flux 异步响应模型的 spring-boot-starter-webflux 依赖则可以选择 Lettuce 或 Redisson 客户端。此处参考 bucket4j-spring-boot-starter 配置Jedis 只支持同步Lettuce 和 Redisson 只支持异步。二、Bucket4j 配置本文采用 RateLimiting 注解的方式以下是 yaml 配置bucket4j:cache-to-use:redis-jedismethods:-name:rate-limit-method#RateLimiting引用的方法名cache-name:bucketsrate-limit:bandwidths:-capacity:5#总容量refill-capacity:3#填充量time:10#10s内填充3个令牌最多保留5个unit:secondsrefill-speed:greedy#greedy贪婪模式在时间内均匀发放interval间隔模式到时间一次性发放将 RateLimiting 注解在需要限流的 Controller 层方法上RateLimiting(namerate-limit-method,//配置的methods名称fallbackMethodNamefallbackMethod)//超限时执行的方法名定义在下面PostMapping(/rateLimitTest)publicResponseEntityBooleanrateLimitTest(){returnResponseEntity.ok(true);}/** * 定义bucket4j请求超限时执行的后备方法 */publicResponseEntityBooleanfallbackMethod(){returnResponseEntity.ok(false);}此外也可以采用配置 filters 属性的方式无需注解参考 bucket4j-spring-boot-starter github 文档。三、配置 JedisPool完成上面的配置后初次启动报错。检查 Bucket4j 的 Jedis 源码发现需要定义一个 JedisPool 的 Bean编写 JedisPool 配置类ConfigurationpublicclassRedisConfig{/** * 用于bucket4j */BeanpublicJedisPooljedisPool(JedisPropertiesjedisProperties){JedisPoolConfigjedisPoolConfignewJedisPoolConfig();jedisPoolConfig.setMaxTotal(jedisProperties.getJedis().getPool().getMaxActive());jedisPoolConfig.setMaxWait(jedisProperties.getJedis().getPool().getMaxWait());jedisPoolConfig.setMaxIdle(jedisProperties.getJedis().getPool().getMaxIdle());jedisPoolConfig.setMinIdle(jedisProperties.getJedis().getPool().getMinIdle());returnnewJedisPool(jedisPoolConfig,jedisProperties.getHost(),jedisProperties.getPort(),Math.toIntExact(jedisProperties.getTimeout().toMillis()),jedisProperties.getPassword(),jedisProperties.getDatabase());}}读取 Jedis 配置的类ComponentConfigurationProperties(prefixspring.data.redis)DatapublicclassJedisProperties{privateStringhost;privateIntegerport;privateStringpassword;privateIntegerdatabase;privateDurationtimeout;privateMyJedisPooljedis;DatapublicstaticclassMyJedisPool{privatePoolpool;DatapublicstaticclassPool{privateIntegermaxActive;privateDurationmaxWait;privateIntegermaxIdle;privateIntegerminIdle;}}}application.yamlspring:data:redis:host:${host}port:6379password:${password}database:0timeout:10s#用于bucket4jjedis:pool:max-active:200max-wait:10smax-idle:10min-idle:1至此已完成所有配置可以请求方法进行限流测试了。参考[1]: bucket4j github 文档[2]: bucket4j-spring-boot-starter github 文档[3]: bucket4j 官方文档集成 jedis[4]: 轻松实现 API 接口限流Bucket4j 在 Spring Boot 中的应用[5]: Jedis使用教程详解

相关新闻

2026/9/6 3:27:07

从语音识别到字幕打轴:构建智能字幕工作流的实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 3:27:07

昆明靠谱导游挑选指南:春城花海之旅避坑攻略+口碑向导推荐

昆明,这座被称为“春城”的高原明珠,藏着石林的喀斯特地质奇迹、滇池的红嘴鸥诗意、云南民族村的多元风情,还有过桥米线的鲜香、汽锅鸡的滋补、鲜花饼的甜蜜。想要深度解锁这里的四季花海、千年地质与滇味美食,选对一位懂石林地质…

2026/9/6 3:27:07

8款精选AI论文工具横向实测,本硕博避坑必备指南

前言:AI 写论文乱象频发,实测 8 款工具理清适配边界 每到毕业季,本科生、硕博生都会集中寻找 AI 论文辅助工具,市面各类写作软件层出不穷。然而,这些工具普遍存在几大硬伤:参考文献虚假、无法匹配本校格式…

2026/9/6 4:22:09

三天学完一学期?AI辅助高效学习全流程实操拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 4:22:09

770B MoE开源模型Hy4 preview实测:架构、部署与WorkBuddy应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 4:22:09

冷知识 | 同样的文件,拷贝到移动硬盘后占用空间竟然暴涨100多G?——从簇大小角度讲“同文件”在不同磁盘的存储占用差异

一次关于文件系统簇大小、Finder 显示逻辑和“停车位”理论的探究,后附实测截图一、现象:两个文件夹,两种“灵异”结果最近整理备份时,我发现了两个令人费解的现象。我把电脑里的文件夹拷贝到外接备份盘,文件内容一字未…

2026/9/6 4:22:09

8核16G云服务器实战指南:从选型到部署性能调优全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 4:17:09

PLC与变频器联动的交流电机调速系统设计与调试实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/5 2:45:13

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/5 2:30:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/5 2:46:50

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…