1. 基本用法
复制代码
org.redisson
redisson
3.8.2
复制代码
复制代码
Config config = new Config();
config.useClusterServers()
.setScanInterval(2000) // cluster state scan interval in milliseconds
.addNodeAddress("redis://127.0.0.1:7000", "redis://127.0.0.1:7001")
.addNodeAddress("redis://127.0.0.1:7002");
RedissonClient redisson = Redisson.create(config);
RLock lock = redisson.getLock("anyLock");
lock.lock();
try {
...
} finally {
lock.unlock();
}
复制代码
针对上面这段代码,重点看一下Redisson是如何基于Redis实现分布式锁的
Redisson中提供的加锁的方法有很多,但大致类似,此处只看lock()方法
更多请参见 https://github.com/redisson/redisson/wiki/8.-distributed-locks-and-synchronizers
2. 加锁
可以看到,调用getLock()方法后实际返回一个RedissonLock对象,在RedissonLock对象的lock()方法主要调用tryAcquire()方法
由于leaseTime == -1,于是走tryLockInnerAsync()方法,这个方法才是关键
首先,看一下evalWriteAsync方法的定义
复制代码
RFuture evalWriteAsync(String key, Codec codec, RedisCommand evalCommandType, String script, List