# union-common
**Repository Path**: empty_null/union-common
## Basic Information
- **Project Name**: union-common
- **Description**: 访问频次限制工具类,通过Redis来实现。使用RedisTemplate配合Lua脚本,完成限制操作。只需要在目标方法增加注解,即可实现功能。
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-08-24
- **Last Updated**: 2023-09-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: common, Redis, 限流, RedissonClient
## README
# union-common
#### 介绍
1. 访问频次限制工具类,通过Redis来实现。使用RedisTemplate配合Lua脚本,完成限制操作。只需要在目标方法增加注解,即可实现功能。
2. 集成Redisson,通过注解方式完成Redlock的加锁
3. 统计接口整个链路的耗时信息
#### 技术栈
+ jdk 17
+ springboot 3.1.2
+ Redis
+ Redisson
#### 安装教程
1. 引入仓库
2. 添加pom依赖
```pom
com.gitee.empty_null
dependencies
0.0.2
pom
import
com.gitee.empty_null
union-common-cache
```
3. 通过添加注解方式使用功能
(1) 接口访问限制
```java
+ @AccessLimiter
public @interface AccessLimiter {
String keyPrefix();
/**
* 用户请求限制
*/
boolean limit() default false;
/**
* 用户请求时间
* 毫秒
*/
int expire() default 500;
/**
* 用户请求时间内次数
*/
int permits() default 1;
/**
* 提示信息
*/
String msg() default "当前请求太频繁,稍后再试";
/**
* 请求入参中取key值
* SpEL 表达式支持 #key
*/
@Language(value = "SpEL")
String keySpEL() default "";
/**
* 是否抛异常
*/
boolean throwException() default true;
/**
* throwException为false,不抛出异常时,自定义返回对象的SpEL表达式
* 支持 @bean.methodName(#param1)
* 例: @testService.testMethod(#testKey)
*/
@Language(value = "SpEL")
String resultExpression() default "";
}
```
(2)RedissonLock使用
```java
@EnableRedissonLock 开启RedissonLock注解
个性化配置@RedissonLock参数,完成加锁
public @interface RedissonLock {
/**
* key前缀
*/
String keyPrefix();
/**
* key值表达式
*/
@Language("SpEL")
String keySpEL() default "";
/**
* tryLock锁最大时间
*/
int timeout() default 0;
/**
* 时间单位
*/
TimeUnit timeUnit() default TimeUnit.SECONDS;
/**
* 是否tryLockAsync
*/
boolean async() default false;
}
```
(3)接口请求链路耗时统计
```java
@EnableStatisticsTime 开始统计功能
个性化配置@StatisticsTime信息,统计信息
public @interface StatisticsTime {
/**
* 前缀
*/
String prefix() default "statistics:time";
boolean isEnd() default true;
}
```
#### 使用说明
1. 接口访问限制,自定义实现方法
```tex
继承DefaultLimitMethodStrategy或AbstractLimitMethodStrategy类,
(1)通过覆写generateKey方法可自定义实现key的生成策略,通过覆写notAllow方法,自定义限制的规则
(2)通过AccessLimiter注解中throwException属性配合onErrorResult方法,在限制访问时,不抛出异常的方式,自定义返回对象信息
```