尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

接口限流代码 - 实践

接口限流代码 - 实践
📅 发布时间:2026/6/19 12:37:35

接口限流代码 - 实践

org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-redis
@Component
public class RateLimitInterceptor implements HandlerInterceptor {
@Autowired
private RateLimiter rateLimiter;
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) {
String ip = request.getRemoteAddr();
if (!rateLimiter.tryAcquire(ip)) {
response.setStatus(429);
return false;
}
return true;
}
}
public class RedisRateLimiter implements RateLimiter {
private final RedisTemplate redisTemplate;
public boolean tryAcquire(String key, int limit, int timeout) {
Long count = redisTemplate.opsForValue().increment(key, 1);
if (count == 1) {
redisTemplate.expire(key, timeout, TimeUnit.SECONDS);
}
return count = 1) {
tokens--;
return true;
}
return false;
}
}
@Configuration
public class RateLimitConfig {
@Bean
public RateLimiter redisRateLimiter(RedisTemplate redisTemplate) {
return new RedisRateLimiter(redisTemplate);
}
@Bean
public RateLimiter tokenBucketRateLimiter() {
return new TokenBucketRateLimiter(10, 1); // 10容量,每秒1个令牌
}
}
  1. Redis限流:通过Redis的原子操作实现精确计数,适合分布式环境
  2. 令牌桶算法:单机限流方案,支持突发流量处理
  3. 拦截器机制:统一处理所有接口请求
  4. 可配置化:支持动态调整限流参数
  5. 响应状态码:返回429 Too Many Requests

实际部署时建议:

  • 结合Nginx层限流
user nginx;
worker_processes auto;
events {
worker_connections 1024;
}
http {
# 白名单IP段定义
geo $limit {
default 1;
10.0.0.0/8 0;    # 内网不限流
192.168.1.100 0; # 特定IP不限流
}
# 分层限流区域定义
limit_req_zone $binary_remote_addr zone=api_low:10m rate=100r/s;
limit_req_zone $binary_remote_addr zone=api_medium:10m rate=50r/s;
limit_req_zone $binary_remote_addr zone=api_high:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
# 自定义日志格式
log_format rate_log '$remote_addr - $http_x_forwarded_for [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'RateStatus=$limit_req_status ConnStatus=$limit_conn_status '
'ServiceTime=$request_time';
access_log /var/log/nginx/rate_limit.log rate_log;
error_log /var/log/nginx/error.log warn;
server {
listen 80;
server_name api.example.com;
# 公共静态资源不限流
location /static/ {
alias /var/www/static/;
access_log off;
}
# 健康检查接口不限流
location /health {
access_by_lua_block {
ngx.say("OK");
ngx.exit(200);
}
}
# 重要接口分层限流
location ~ ^/api/vip/ {
limit_req zone=api_high burst=20 nodelay;
limit_conn conn_limit 3;
proxy_pass http://backend_vip;
}
location ~ ^/api/business/ {
limit_req zone=api_medium burst=30 delay=10;
limit_conn conn_limit 10;
proxy_pass http://backend_biz;
}
# 普通接口限流
location /api/ {
limit_req zone=api_low burst=50;
limit_conn conn_limit 20;
proxy_pass http://backend;
}
# 白名单绕过限流
if ($limit = 0) {
set $limit_pass 1;
}
location / {
limit_req zone=api_low burst=50;
limit_conn conn_limit 20;
proxy_pass http://backend;
}
}
}
# 全局总限流(共享100r/s)
limit_req_zone $server_name zone=global_limit:10m rate=100r/s;
location /api/ {
limit_req zone=global_limit;  # 所有IP共享100请求/秒
}

相关新闻

  • OutGuess 安装与问题排查指南(Kali Linux 环境)
  • 拓展操作码举例
  • TryHackMe | Cicada-3301 Vol:1

最新新闻

  • 术语俗话 --- 防火墙/IDS/IPS/WAF
  • 2026 沈阳翡翠回收横评!跑遍沈河和平,靠谱商家盘点 - 逸程
  • 鸣潮智能管家:重新定义你的游戏时间管理艺术
  • drand核心概念解析:阈值签名与BLS12-381密码学原理
  • 2026聊城放心贵金属回收,CCIC 中检授权收黄金回收铂金回收白银回收持证实体门店 - 诚金汇钻回收公司
  • 2026石家庄黄金回收深度实测!高价透明无套路,本地综合实力认准禹竞名奢汇 - 名奢变现站

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号