本章主要介绍redis对接口进行限流访问,当接口在高并发的情况下,会对我们的服务器造成一定影响,可通过次案例提供轻微的解决方案
应用场景:用户注册,电商秒杀接口,高并发 ....
实现方案:自定义注解+拦截器+Redis实现限流 (单体和分布式均适用,全局限流)
可根据自己需求通过本文也可直接应用到项目中
Demo:https://gitee.com/Audis/ccl-coding-sso.git
1.创建自定义注解
package com.ccl.coding.sso.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Inherited
@Documented
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface AccessLimit {
//标识限制次数
int limit() default 5;
//标识时间
int sec() default 5;
}
2.创建拦截器并通过反射对接口的访问进行限制
package com.ccl.coding.sso.interceptor;
import com.ccl.coding.sso.annotation.AccessLimit;
import com.ccl.coding.sso.exception.AccessLimitException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.s