Skip to content

Commit 97239b9

Browse files
authored
Merge pull request #2 from TaXueWWL/dev
版本1.1.0
2 parents 53485ff + 2026cf7 commit 97239b9

File tree

4 files changed

+154
-17
lines changed

4 files changed

+154
-17
lines changed

README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,34 @@ redis-distributed-lock-demo-spring   redis-distributed-lock-core 调
9090
2018-07-11 09:48:13.627 |-INFO [pool-3-thread-1] com.snowalker.lock.redisson.annotation.DistributedLockHandler [46] -| 释放Redis分布式锁[成功],解锁完成,结束业务逻辑...
9191
2018-07-11 09:48:13.628 |-INFO [pool-3-thread-1] com.snowalker.lock.redisson.annotation.DistributedLockHandler [50] -| [结束]执行RedisLock环绕通知
9292

93+
## application.properties配置方式(yaml同理)
94+
### redisson分布式锁配置--单机
95+
96+
redisson.lock.server.address=127.0.0.1:6379
97+
redisson.lock.server.type=standalone
98+
99+
### redisson分布式锁配置--哨兵
100+
**redisson.lock.server.address** 格式为: sentinel.conf配置里的sentinel别名,sentinel1节点的服务IP和端口,sentinel2节点的服务IP和端口,sentinel3节点的服务IP和端口
101+
<br/>比如sentinel.conf里配置为sentinel monitor my-sentinel-name 127.0.0.1 6379 2,那么这里就配置my-sentinel-name
102+
103+
redisson.lock.server.address=my-sentinel-name,127.0.0.1:26379,127.0.0.1:26389,127.0.0.1:26399
104+
redisson.lock.server.type=sentinel
105+
106+
### redisson分布式锁配置--集群方式
107+
cluster方式至少6个节点(3主3从,3主做sharding,3从用来保证主宕机后可以高可用)
108+
<br/>地址格式为: 127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
109+
110+
redisson.lock.server.address=127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
111+
redisson.lock.server.type=cluster
112+
113+
### redisson分布式锁配置--主从
114+
地址格式为**主节点,子节点,子节点**
115+
<br/>比如:127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381
116+
<br/>代表主节点:127.0.0.1:6379,从节点127.0.0.1:6380,127.0.0.1:6381
117+
118+
redisson.lock.server.address=127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381
119+
redisson.lock.server.type=masterslave
120+
93121
## 参考资料
94122

95123
[分布式锁的多种实现](http://wuwenliang.net/2018/07/08/%E5%88%86%E5%B8%83%E5%BC%8F%E9%94%81%E7%9A%84%E5%A4%9A%E7%A7%8D%E5%AE%9E%E7%8E%B0/)

redis-distributed-lock-starter/conf/application.properties

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,25 @@ redisson.lock.server.type=standalone
88
########################################################################
99
#
1010
# redisson分布式锁配置--哨兵
11+
# 格式为: sentinel.conf配置里的sentinel别名,sentinel1节点的服务IP和端口,sentinel2节点的服务IP和端口,sentinel3节点的服务IP和端口
12+
# 比如sentinel.conf里配置为sentinel monitor my-sentinel-name 127.0.0.1 6379 2,那么这里就配置my-sentinel-name
1113
#
1214
#########################################################################
13-
#redisson.server.address=127.0.0.1:6379
14-
#redisson.server.type=sentinel
15+
#redisson.server.address=my-sentinel-name,127.0.0.1:26379,127.0.0.1:26389,127.0.0.1:26399
16+
#redisson.server.type=sentinel
17+
########################################################################
18+
#
19+
# redisson分布式锁配置--集群方式
20+
# cluster方式至少6个节点(3主3从,3主做sharding,3从用来保证主宕机后可以高可用)
21+
# 格式为: 127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
22+
#########################################################################
23+
#redisson.server.address=127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
24+
#redisson.server.type=cluster
25+
########################################################################
26+
#
27+
# redisson分布式锁配置--主从
28+
# 主节点,子节点,子节点
29+
# 格式为: 127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381
30+
#########################################################################
31+
#redisson.server.address=127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381
32+
#redisson.server.type=masterslave

redis-distributed-lock-starter/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@
3030
</properties>
3131

3232
<dependencies>
33+
<dependency>
34+
<groupId>com.google.guava</groupId>
35+
<artifactId>guava</artifactId>
36+
<version>${google-guava}</version>
37+
</dependency>
3338
<!-- aspectjrt -->
3439
<dependency>
3540
<groupId>org.aspectj</groupId>

redis-distributed-lock-starter/src/main/java/com/snowalker/lock/redisson/RedissonManager.java

Lines changed: 101 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package com.snowalker.lock.redisson;
22

3+
import com.google.common.base.Preconditions;
34
import com.snowalker.lock.redisson.constant.RedisConnectionType;
45
import org.redisson.Redisson;
56
import org.redisson.config.Config;
67
import org.slf4j.Logger;
78
import org.slf4j.LoggerFactory;
89

10+
import java.util.ArrayList;
11+
import java.util.List;
12+
913
/**
1014
* @author snowalker
1115
* @date 2018/7/10
@@ -64,28 +68,110 @@ public static RedissonConfigFactory getInstance() {
6468
* @return Config
6569
*/
6670
Config createConfig(String connectionType, String address) {
71+
Preconditions.checkNotNull(connectionType);
72+
Preconditions.checkNotNull(address);
6773
if (connectionType.equals(RedisConnectionType.STANDALONE.getConnection_type())) {
68-
try {
69-
String redisAddr = REDIS_CONNECTION_PREFIX + address;
70-
config.useSingleServer().setAddress(redisAddr);
71-
LOGGER.info("初始化standalone方式Config,redisAddress:" + redisAddr);
72-
} catch (Exception e) {
73-
LOGGER.error("standalone Redisson init error", e);
74-
e.printStackTrace();
75-
}
76-
return config;
74+
return createStandaloneConfig(address);
7775
} else if (connectionType.equals(RedisConnectionType.SENTINEL.getConnection_type())) {
78-
return null;
76+
return createSentinelConfig(address);
77+
} else if (connectionType.equals(RedisConnectionType.CLUSTER.getConnection_type())) {
78+
return createClusterConfig(address);
79+
} else if (connectionType.equals(RedisConnectionType.MASTERSLAVE.getConnection_type())) {
80+
return createMasterSlaveConfig(address);
7981
}
8082
throw new RuntimeException("创建Redisson连接Config失败!当前连接方式:" + connectionType);
8183
}
82-
}
8384

84-
public static void main(String[] args) {
85-
Config config = new Config();
86-
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
87-
Redisson redisson = (Redisson) Redisson.create(config);
85+
/**
86+
* 主从方式配置
87+
* @param address
88+
* @return
89+
*/
90+
private Config createMasterSlaveConfig(String address) {
91+
try {
92+
String[] addrTokens = address.split(",");
93+
String masterNodeAddr = addrTokens[0];
94+
/**设置主节点ip*/
95+
config.useMasterSlaveServers().setMasterAddress(masterNodeAddr);
96+
/**设置从节点,移除第一个节点,默认第一个为主节点*/
97+
List<String> slaveList = new ArrayList<>();
98+
for (String addrToken : addrTokens) {
99+
slaveList.add(REDIS_CONNECTION_PREFIX + addrToken);
100+
}
101+
slaveList.remove(0);
102+
103+
config.useMasterSlaveServers().addSlaveAddress((String[]) slaveList.toArray());
104+
LOGGER.info("初始化[MASTERSLAVE]方式Config,redisAddress:" + address);
105+
} catch (Exception e) {
106+
LOGGER.error("MASTERSLAVE Redisson init error", e);
107+
e.printStackTrace();
108+
}
109+
return config;
110+
}
111+
112+
/**
113+
* 集群方式配置
114+
* @param address
115+
* @return
116+
*/
117+
private Config createClusterConfig(String address) {
118+
try {
119+
String[] addrTokens = address.split(",");
120+
/**设置cluster节点的服务IP和端口*/
121+
for (int i = 0; i < addrTokens.length; i++) {
122+
config.useClusterServers().addNodeAddress(REDIS_CONNECTION_PREFIX + addrTokens[i]);
123+
}
124+
LOGGER.info("初始化[cluster]方式Config,redisAddress:" + address);
125+
} catch (Exception e) {
126+
LOGGER.error("cluster Redisson init error", e);
127+
e.printStackTrace();
128+
}
129+
return config;
130+
}
131+
132+
/**
133+
* 哨兵方式配置
134+
* @param address
135+
* @return
136+
*/
137+
private Config createSentinelConfig(String address) {
138+
try {
139+
String[] addrTokens = address.split(",");
140+
String sentinelAliasName = addrTokens[0];
141+
/**设置redis配置文件sentinel.conf配置的sentinel别名*/
142+
config.useSentinelServers()
143+
.setMasterName(sentinelAliasName);
144+
/**设置sentinel节点的服务IP和端口*/
145+
for (int i = 1; i < addrTokens.length; i++) {
146+
config.useSentinelServers().addSentinelAddress(REDIS_CONNECTION_PREFIX + addrTokens[i]);
147+
}
148+
LOGGER.info("初始化[sentinel]方式Config,redisAddress:" + address);
149+
} catch (Exception e) {
150+
LOGGER.error("sentinel Redisson init error", e);
151+
e.printStackTrace();
152+
}
153+
return config;
154+
}
155+
156+
/**
157+
* 单机方式配置
158+
* @param address
159+
* @return
160+
*/
161+
private Config createStandaloneConfig(String address) {
162+
try {
163+
String redisAddr = REDIS_CONNECTION_PREFIX + address;
164+
config.useSingleServer().setAddress(redisAddr);
165+
LOGGER.info("初始化[standalone]方式Config,redisAddress:" + address);
166+
} catch (Exception e) {
167+
LOGGER.error("standalone Redisson init error", e);
168+
e.printStackTrace();
169+
}
170+
return config;
171+
}
172+
88173
}
174+
89175
}
90176

91177

0 commit comments

Comments
 (0)