# zjj_admin的限流starter **Repository Path**: zhao_jian_jun/limit_starter ## Basic Information - **Project Name**: zjj_admin的限流starter - **Description**: zjj_admin的限流starter 若需要使用是呢,将项目拉取下来,install一下; 在配置文件中填写限流方式:com.zjj.limit.type=local/redis 其中redis表示使用基于redis的方式限流,local表示基于Guava限流(只能是单体) 之后再需要限流的方法上添加 @Limit 注解即可 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 2 - **Created**: 2023-04-12 - **Last Updated**: 2023-11-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## zjj_admin 限流工具的使用说明 ### 组件源码 **https://gitee.com/zhao_jian_jun/limit_starter** ### 说明 本组件必须和 SpringBoot 框架一起使用 在项目中,有些时候需要对某个接口实现限流功能,防止客户端进行频繁访问。 zii_limit_starter 就可以通过注解实现单个接口的限流功能。 非常的方便:组件提供了两种方式的限流,分别是 Guava 和 Redis。 使用者可以手动选择使用什么方式。 ### 使用方法 1、将代码拉取到本地之后,使用 meavn 执行 install 操作进行打包,生成对应的 .jar 文件。 2、在自己的项目中将组件的依赖引入,如图 ![image-20230428162948464](README.assets/image-20230428162948464.png) 3、在自己的配置文件中说明需要使用的的限流方式,选择 Guava 还是 Redis,在配置文件中说明 com.zjj.limit.type=local/redis,具体如图: ![image-20230428163224694](README.assets/image-20230428163224694.png) 4、最后在您需要限流的接口上 使用 @Limit 注解即可,如图,之后就可以启动项目测试了。 ![image-20230428163328997](README.assets/image-20230428163328997.png) 说明:若使用 Redis 模式,必须要在项目中配置 Redis 的相关配置,并且能够连接成功。例如: ```java /** * Redis配置 * * @author zjj_admin */ @Configuration public class RedisConfig { @Bean public RedisConnectionFactory redisConnectionFactory() { return new JedisConnectionFactory(); } @Bean public RedisTemplate redisTemplate(RedisConnectionFactory factory) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(factory); // 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式) Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper mapper = new ObjectMapper(); mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); serializer.setObjectMapper(mapper); template.setValueSerializer(serializer); // 使用StringRedisSerializer来序列化和反序列化redis的key值 template.setKeySerializer(new StringRedisSerializer()); template.afterPropertiesSet(); return template; } } ``` ### 原理说明 组件代码结构如下: ![image-20230428163930249](README.assets/image-20230428163930249.png) 同时,需要 让SpringBoot 扫描器扫描到配置 ![image-20230428164029187](README.assets/image-20230428164029187.png) 具体代码请下载源码观看,不太复杂。