Skip to content

Commit 028d24a

Browse files
committed
✅ Adding tests.
1 parent 57169fe commit 028d24a

File tree

1 file changed

+150
-0
lines changed

1 file changed

+150
-0
lines changed
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
package com.crossoverjie.distributed.lock;
2+
3+
import com.crossoverjie.distributed.constant.RedisToolsConstant;
4+
import com.google.common.util.concurrent.ThreadFactoryBuilder;
5+
import org.junit.Before;
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
8+
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
9+
import redis.clients.jedis.JedisPool;
10+
import redis.clients.jedis.JedisPoolConfig;
11+
import redis.clients.jedis.JedisShardInfo;
12+
13+
import java.util.concurrent.ArrayBlockingQueue;
14+
import java.util.concurrent.ExecutorService;
15+
import java.util.concurrent.ThreadFactory;
16+
import java.util.concurrent.ThreadPoolExecutor;
17+
import java.util.concurrent.TimeUnit;
18+
19+
/**
20+
* real test by single Redis
21+
*/
22+
public class RealSingleRedisLockTest {
23+
24+
private static Logger logger = LoggerFactory.getLogger(RealSingleRedisLockTest.class);
25+
private static ExecutorService executorServicePool;
26+
27+
28+
private static RedisLock redisLock;
29+
30+
private static JedisPool jedisPool;
31+
32+
33+
public static void main(String[] args) throws InterruptedException {
34+
RealSingleRedisLockTest redisLockTest = new RealSingleRedisLockTest();
35+
redisLockTest.init();
36+
initThread();
37+
38+
for (int i = 0; i < 50; i++) {
39+
executorServicePool.execute(new Worker(i));
40+
}
41+
42+
executorServicePool.shutdown();
43+
while (!executorServicePool.awaitTermination(1, TimeUnit.SECONDS)) {
44+
logger.info("worker running");
45+
}
46+
logger.info("worker over");
47+
48+
}
49+
50+
@Before
51+
public void setBefore() {
52+
init();
53+
54+
}
55+
56+
private void init() {
57+
58+
JedisPoolConfig config = new JedisPoolConfig();
59+
config.setMaxIdle(100);
60+
config.setMaxTotal(100);
61+
config.setMaxWaitMillis(10000);
62+
config.setTestOnBorrow(true);
63+
config.setTestOnReturn(true);
64+
65+
//单机
66+
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(config) ;
67+
68+
jedisConnectionFactory.setTimeout(100000);
69+
jedisConnectionFactory.afterPropertiesSet();
70+
jedisConnectionFactory.setShardInfo(new JedisShardInfo("127.0.0.1", 6379));
71+
72+
redisLock = new RedisLock.Builder(jedisConnectionFactory, RedisToolsConstant.SINGLE)
73+
.lockPrefix("lock_")
74+
.sleepTime(100)
75+
.build();
76+
77+
}
78+
79+
public static void initThread() {
80+
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
81+
.setNameFormat("current-thread-%d").build();
82+
executorServicePool = new ThreadPoolExecutor(350, 350, 0L, TimeUnit.MILLISECONDS,
83+
new ArrayBlockingQueue<Runnable>(200), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
84+
85+
}
86+
87+
88+
private static class Worker implements Runnable {
89+
90+
private int index;
91+
92+
public Worker(int index) {
93+
this.index = index;
94+
}
95+
96+
@Override
97+
public void run() {
98+
//测试非阻塞锁
99+
boolean limit = redisLock.tryLock("abc", "12345");
100+
if (limit) {
101+
logger.info("加锁成功=========");
102+
boolean unlock = redisLock.unlock("abc", "12345");
103+
logger.info("解锁结果===[{}]",unlock);
104+
} else {
105+
logger.info("加锁失败");
106+
107+
}
108+
109+
//测试非阻塞锁 + 超时时间
110+
//boolean limit = redisLock.tryLock("abc", "12345",1000);
111+
//if (limit) {
112+
// logger.info("加锁成功=========");
113+
// boolean unlock = redisLock.unlock("abc", "12345");
114+
// logger.info("解锁结果===[{}]",unlock);
115+
//} else {
116+
// logger.info("加锁失败");
117+
//
118+
//}
119+
120+
121+
//测试阻塞锁
122+
//try {
123+
// redisLock.lock("abc", "12345");
124+
// logger.info("加锁成功=========");
125+
//} catch (InterruptedException e) {
126+
// e.printStackTrace();
127+
//}
128+
//redisLock.unlock("abc","12345") ;
129+
130+
131+
132+
//测试阻塞锁 + 阻塞时间
133+
//try {
134+
// boolean limit = redisLock.lock("abc", "12345", 100);
135+
// if (limit) {
136+
// logger.info("加锁成功=========");
137+
// boolean unlock = redisLock.unlock("abc", "12345");
138+
// logger.info("解锁结果===[{}]",unlock);
139+
// } else {
140+
// logger.info("加锁失败");
141+
//
142+
// }
143+
//} catch (InterruptedException e) {
144+
// e.printStackTrace();
145+
//}
146+
}
147+
}
148+
149+
150+
}

0 commit comments

Comments
 (0)