# open-redisson-lock
**Repository Path**: MyCodeStudio/open-lock
## Basic Information
- **Project Name**: open-redisson-lock
- **Description**: 基于Redisson的分布式幂等、分布式锁轻量级框架
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 5
- **Created**: 2022-05-24
- **Last Updated**: 2022-06-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

#### 升级日志
**2021-01-06**
1. 发布 1.0.0.RELEASE 版本
---
#### 使用教程
1. 引入 pom.xml
```xml
com.open
cloud-lock
1.0.0.RELEASE
```
2. 在`application.properties`增加`redisson`配置
##### 单例模式
```
redisson.model=SINGLE
redisson.password=root
redisson.clientName=
redisson.single.address=127.0.0.1:6379
```
##### 集群模式
>集群模式除了适用于Redis集群环境,也适用于任何云计算服务商提供的集群模式
```
redisson.model=CLUSTER
redisson.password=root
redisson.clientName=
redisson.multiple.node[0]=127.0.0.1:6379
redisson.multiple.node[1]=127.0.0.1:6389
redisson.multiple.node[2]=127.0.0.1:6399
```
##### 云托管模式
>云托管模式适用于任何由云计算运营商提供的Redis云服务
```
redisson.model=REPLICATED
redisson.password=root
redisson.clientName=
redisson.multiple.node[0]=127.0.0.1:6379
redisson.multiple.node[1]=127.0.0.1:6389
redisson.multiple.node[2]=127.0.0.1:6399
```
##### 哨兵模式
```
redisson.model=SENTINEL
redisson.password=root
redisson.clientName=
redisson.multiple.master-name="mymaster"
redisson.multiple.node[0]=127.0.0.1:6379
redisson.multiple.node[1]=127.0.0.1:6389
redisson.multiple.node[2]=127.0.0.1:6399
```
##### 主从模式
```
redisson.model=MASTERSLAVE
#第一台机器就是主库.其他的为从库
redisson.multiple.node[0]=127.0.0.1:6379
redisson.multiple.node[1]=127.0.0.1:6389
redisson.multiple.node[2]=127.0.0.1:6399
```
---
#### 使用说明
>1.如何使用`分布式锁`?
```
@Autowired
private CloudLock lock;
@GetMapping("lockTimeout")
public RestResponse lockTimeout(@RequestParam("name") String name) {
RLock rLock = lock.tryLock(LockModel.REENTRANT, 0L, 10000L,"123");
try {
System.out.println("start:" + name);
Thread.sleep(6000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
//lock.unlock(rLock);
}
System.out.println(name);
return RestResponse.success();
}
```
>2.如何使用`分布式锁幂等性注解`?
```
@Idempotent(key = "#result.msgId+':'+#result.appId",expire = 10000)
@PostMapping("idempotent")
public RestResponse idempotent(@RequestBody RemoteNotifyBO result) {
System.out.println(result.getMsgId() + result.getAppId());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return RestResponse.success(result.getMsgId() + result.getAppId());
}
```
>3.如何使用``redisson` 客户端实现自定义操作`?
```
//只需要在spring 容器中注入redisson客户端就行,如下:
@Autowired
private RedissonClient redissonClient;
```
---
#### 属性列表
> 1.公共参数
| 属性名 | 默认值 | 备注 |
| :---- | :---- | :---- |
| redisson.model | SINGLE | 集群模式:SINGLE(单例),SENTINEL(哨兵),MASTERSLAVE(主从),CLUSTER(集群),REPLICATED(云托管) |
| redisson.codec | org.redisson.codec.JsonJacksonCodec | Redisson的对象编码类是用于将对象进行序列化和反序列化 |
| redisson.lockWatchdogTimeout | 30000 | 监控锁的看门狗超时时间单位为毫秒。该参数只适用于分布式锁的加锁请求中未明确使用leaseTimeout参数的情况。如果该看门口未使用lockWatchdogTimeout去重新调整一个分布式锁的lockWatchdogTimeout超时,那么这个锁将变为失效状态。这个参数可以用来避免由Redisson客户端节点宕机或其他原因造成死锁的情况 |
| redisson.password | 无 | 用于节点身份验证的密码 |
| redisson.clientName | 无 | 在Redis节点里显示的客户端名称 |
| redisson.connectTimeout | 10000 | 同任何节点建立连接时的等待超时。时间单位是毫秒。 |
| redisson.timeout | 3000 | 等待节点回复命令的时间。该时间从命令发送成功时开始计时。 |
| redisson.lockModel | 单个key默认`可重入锁`多个key默认`红锁` | 锁的模式.如果不设置, REENTRANT(可重入锁),FAIR(公平锁),MULTIPLE(联锁),REDLOCK(红锁),READ(读锁), WRITE(写锁) |
| redisson.attemptTimeout | 10000L | 等待获取锁超时时间,-1则是一直等待 单位毫秒 |
| redisson.dataValidTime | 1000\*60\* 30L | 数据缓存时间 默认30分钟 -1永久缓存 |
>2. 单例模式参数
| 属性名 | 默认值 | 备注 |
| :---- | :---- | :---- |
| redisson.single.address | 无 | 服务器地址,必填ip:port |
| redisson.single.database | 0 | 尝试连接的数据库编号 |
| redisson.single.connectionPoolSize | 64 | 等待节点回复命令的时间。该时间从命令发送成功时开始计时。 |
| redisson.single.connectionMinimumIdleSize | 32 | 等待节点回复命令的时间。该时间从命令发送成功时开始计时。 |
>3. 集群模式
| 属性名 | 默认值 | 备注 |
| :---- | :---- | :---- |
| redisson.multiple.scanInterval | 1000 | (集群,哨兵,云托管模特特有) 对Redis集群节点状态扫描的时间间隔。单位是毫秒。 |
| redisson.multiple.readMode | SLAVE | 设置读取操作选择节点的模式。 可用值为: SLAVE - 只在从服务节点里读取。 MASTER - 只在主服务节点里读取。 MASTER_SLAVE - 在主从服务节点里都可以读取。 |
| redisson.multiple.loadBalancer | org.redisson.connection.balancer.RoundRobinLoadBalancer | 负载均衡算法类的选择 默认值:轮询调度算法,可选(WeightedRoundRobinBalancer)权重轮询调度算法,(RandomLoadBalancer)随机调度算法 |
| redisson.multiple.node | 无 | 服务器节点地址.必填 |
| redisson.multiple.database | 0 | (哨兵模式,云托管,主从模式特有)尝试连接的数据库编号。 |
| redisson.multiple.masterName | 无 | (哨兵模式特有)主服务器的名称是哨兵进程中用来监测主从服务切换情况的。 |
| redisson.multiple.slaveConnectionMinimumIdleSize | 32 | 多从节点的环境里,每个从服务节点里用于普通操作(非 发布和订阅)的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时读取反映速度。 |
| redisson.multiple.slaveConnectionPoolSize | 64 | 多从节点的环境里,每个从服务节点里用于普通操作(非 发布和订阅)连接的连接池最大容量。连接池的连接数量自动弹性伸缩。 |
| redisson.multiple.masterConnectionMinimumIdleSize | 32 | 多节点的环境里,每个主节点的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时写入反应速度。 |
| redisson.multiple.masterConnectionPoolSize | 64 | 多主节点的环境里,每个主节点的连接池最大容量。连接池的连接数量自动弹性伸缩。 |