
一.如何对同一IP访问同一接口进行每秒、每分钟、每小时频率限制
话不多说,直接开干,首先写一个注解类
```
import ```
使用注解的原因是:我们使用拦截器在请求处理之前,检查某个请求接口是否有该注解,如果有该注解,获取访问次数和时间段(比如:在1s中只能访问一次)。接下来我们就来写一个拦截器
```
import ```
这里用到了redis,解释一下redis的key(IP+URL)记录了某个ip访问某个接口,value存的是访问的次数,加上一个过期时间,过期时间就是我们在注解上赋值的值。
这里的redis的部分代码也贴出来
```
@Service
```
#怎么获取用户的真实IP呢???如下
```
import ```
下面来正式使用一下
```
@VisitLimit```
这种方式不能很好的应对突发请求,需要对这一类情形平滑处理,比如200ms处理一个请求,下面就到令牌桶出场了!
二、令牌桶实战介绍
2.1 先来个总结吧,让大家分清什么时候用令牌桶,什么时候用漏桶
- 令牌桶:生产一个令牌消费一个
- 漏桶: 处理大流量,并且以固定的速度平滑处理

使用场景:geteway网关
Bucket4j是基于令牌桶算法实现
package 配置route: TEST-AUTH/**的api接口都会路由到TEST-AUTH服务
@SpringBootApplication
三、分布式限流(这里摘自京东抢购业务)
使用Redis+Lua的方式来实现
local public 简单说明一下:redis k = rate.limit:ip:当前秒 V: 5
欢迎指正交流!!
欢迎关注我的微信公众号<搜索:汀雨笔记>,会首发一些最新文章哦!

3336

被折叠的 条评论
为什么被折叠?



