iptables限制ip访问_【原创】JAVA同一IP访问同一接口进行频率限制(分布式(京东抢购业务)及令牌桶实战使用场景...

v2-1221dc84bc9725e11b8f80289d7b196c_1440w.jpg?source=172ae18b

一.如何对同一IP访问同一接口进行每秒、每分钟、每小时频率限制

话不多说,直接开干,首先写一个注解类

```

import 

```

使用注解的原因是:我们使用拦截器在请求处理之前,检查某个请求接口是否有该注解,如果有该注解,获取访问次数和时间段(比如:在1s中只能访问一次)。接下来我们就来写一个拦截器

```

import 

```

这里用到了redis,解释一下redis的key(IP+URL)记录了某个ip访问某个接口,value存的是访问的次数,加上一个过期时间,过期时间就是我们在注解上赋值的值。

这里的redis的部分代码也贴出来

```

@Service

```

#怎么获取用户的真实IP呢???如下

```

import 

```

下面来正式使用一下

```

@VisitLimit

```

这种方式不能很好的应对突发请求,需要对这一类情形平滑处理,比如200ms处理一个请求,下面就到令牌桶出场了!

二、令牌桶实战介绍

2.1 先来个总结吧,让大家分清什么时候用令牌桶,什么时候用漏桶

  • 令牌桶:生产一个令牌消费一个
  • 漏桶: 处理大流量,并且以固定的速度平滑处理

v2-de18dd53b06feedde74d93252ece1dd6_b.jpg

使用场景:geteway网关

Bucket4j是基于令牌桶算法实现

package 

配置route: TEST-AUTH/**的api接口都会路由到TEST-AUTH服务

@SpringBootApplication

三、分布式限流(这里摘自京东抢购业务)

使用Redis+Lua的方式来实现

local 
public 

简单说明一下:redis k = rate.limit:ip:当前秒 V: 5

欢迎指正交流!!

欢迎关注我的微信公众号<搜索:汀雨笔记>,会首发一些最新文章哦!

v2-14f6574cca9410245312a7a9ff04e81e_b.jpg
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值