#青训营笔记创作活动#

2月10日 打卡day29

今日学习: AOP+Redis+注解 实现接口ip限流

```java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
@Order(Ordered.HIGHEST_PRECEDENCE)
public @interface RequestLimit {

/**
* 允许访问的次数,默认值120
*/
int count() default 120;

/**
* 间隔的时间段,单位秒,默认值60
*/
int time() default 60;

/**
* 访问达到限制后需要等待的时间,单位秒,默认值120
*/
int waits() default 120;

}
```

通过AOP对方法切面, 在方法执行前进行拦截

具体实现步骤:
1. 解析注解参数
2. 解析请求信息: ip和方法
3. 生成key
4. 获取redis中该key的访问次数
5. 判断次数是否超过范围
- 若超出范围,则拒绝访问,返回提示,并将TTL重置为注解上的等待时间
- 若没有超过范围,则允许访问,并将访问次数+1
- 若查询不到该key,则往redis中进行添加,将值设置为1,将TTL设置为注解上的值

[基于 AOP + Redis + 自定义注解 实现细粒度的接口IP访问限制 | 开源微服务项目 - 掘金 (juejin.cn)](juejin.cn)
展开
评论