恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

SpringBoot AOP + Redis 实现接口限流注解

  • 首页
  • 资讯中心
  • /
  • SpringBoot AOP + Redis 实现接口限流注解

相关资讯

OpenCV卡尺找圆工具开发与工业视觉检测实践 2026/8/2 18:49:17
无人机多视角工地安全检测数据集与应用解析 2026/8/2 18:49:18
SpringBoot 定时任务进阶——动态 cron、分布式定时任务 2026/8/2 18:49:19

最新资讯

光电晶体管光耦的精度与能效:从CTR到PCB布局的工程实战
双极步进电机控制实战:Stepper 29 Click与DRV8825微步进驱动解析
27届大模型面试准备(六十七):大模型推理编译与图优化工程——从计算图到高效内核
光通信系统中的电容器选型:从ESL到电源完整性的工程实践
高速光模块电容选型:从去耦到耦合的关键指标与避坑指南
豆包 LeetCode 19. 删除链表的倒数第 N 个结点 Python3实现

今日推荐

MCU无DAC如何用定时器+DMA 2D输出高保真任意波形
Cortex-M3 Flash下载失败?从编程错误标志到供电瞬态排查
STM32 TouchGFX屏幕切换Transition优化:原理、配置与排障实战

本周热门

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析
数字电路时序基石:深入理解建立时间与保持时间
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

SpringBoot AOP + Redis 实现接口限流注解

发布时间:2026/8/31 23:19:52
SpringBoot AOP + Redis 实现接口限流注解 限流是保护后端系统的第一道防线。用 AOP Redis 实现一个自定义限流注解加到接口上就能限流。一、定义注解Target(ElementType.METHOD)Retention(RetentionPolicy.RUNTIME)publicinterfaceRateLimit{/** 限流 key */Stringkey()default;/** 限流维度user / ip / api */Stringtype()defaultuser;/** 窗口内最大请求数 */longmax()default10;/** 窗口大小秒 */longwindow()default1;/** 被限后的提示 */Stringmessage()default请求太频繁请稍后重试;}二、实现 AOPAspectComponentpublicclassRateLimitAspect{AutowiredprivateStringRedisTemplateredisTemplate;Around(annotation(rateLimit))publicObjectaround(ProceedingJoinPointpjp,RateLimitrateLimit)throwsThrowable{StringkeybuildKey(rateLimit);// 滑动窗口限流booleanallowedtryAcquire(key,rateLimit.max(),rateLimit.window());if(!allowed){thrownewBusinessException(429,rateLimit.message());}returnpjp.proceed();}privatebooleantryAcquire(Stringkey,longmax,longwindowSec){longnowSystem.currentTimeMillis();longwindowMswindowSec*1000L;longwindowStartnow-windowMs;// Lua 脚本保证原子性Stringluaredis.call(ZREMRANGEBYSCORE, KEYS[1], 0, ARGV[1]) local count redis.call(ZCARD, KEYS[1]) if count tonumber(ARGV[2]) then redis.call(ZADD, KEYS[1], ARGV[3], ARGV[3]) redis.call(EXPIRE, KEYS[1], ARGV[4]) return 1 else return 0 end;LongresultredisTemplate.execute(newDefaultRedisScript(lua,Long.class),Collections.singletonList(key),String.valueOf(windowStart),String.valueOf(max),String.valueOf(now),String.valueOf(windowSec1));returnLong.valueOf(1).equals(result);}privateStringbuildKey(RateLimitrateLimit){Stringprefixrate:;switch(rateLimit.type()){caseip:HttpServletRequestrequest((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();returnprefixip:getIp(request);caseapi:returnprefixapi:Stream.of(Thread.currentThread().getStackTrace()).filter(s-s.getMethodName().contains($)).findFirst().orElse(newStackTraceElement(,,,0)).getMethodName();default:// type userreturnprefixuser:StpUtil.getLoginIdAsString();}}publicstaticStringgetIp(HttpServletRequestrequest){Stringiprequest.getHeader(X-Forwarded-For);if(ipnull||ip.isEmpty())iprequest.getHeader(X-Real-IP);if(ipnull||ip.isEmpty())iprequest.getRemoteAddr();if(ip!nullip.contains(,))ipip.split(,)[0].trim();returnip;}}三、使用RestControllerRequestMapping(/api)publicclassTestController{GetMapping(/test)RateLimit(keytest,typeip,max5,window10)publicResultVO?test(){returnResultVO.success(成功);}PostMapping(/seckill/{productId})RateLimit(typeuser,max1,window10)publicResultVO?seckill(PathVariableLongproductId){returnResultVO.success(秒杀成功);}}四、异常处理RestControllerAdvicepublicclassRateLimitExceptionHandler{ExceptionHandler(BusinessException.class)publicResultVO?handleBusiness(BusinessExceptione){if(e.getMessage().contains(请求太频繁)){returnResultVO.error(429,e.getMessage());}returnResultVO.error(e.getCode(),e.getMessage());}}五、压测效果# 模拟 20 个并发请求foriin{1..20};docurl-XGET http://localhost:9090/api/testdone# 正常响应{code:200,message:成功}# 被限响应{code:429,message:请求太频繁请稍后重试} 觉得有用的话点赞 关注【张老师技术栈】吧每周更新 Java/Python/MySQL 实战干货不让你白来。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号