Redisson配置:
@Configuration
public class MyRedissonConfig {
@Bean(destroyMethod="shutdown")
public RedissonClient redisson() throws IOException{
Config config = new Config();
config.useClusterrServers()
.addNodeAddress("redis://127.0.0.1:7004","redis://127.0.0.1:7001");
return Redisson.create(config);
}
}
Redisson是基于Redis的可重入锁RLock,并且RLock实现了Lock接口。
使用方法:
RLock lock = redisson.getLock("anyLock");
//加锁,阻塞式等待。默认加的锁都是30s时间。
//锁会自动续期,如果业务超长,运行期间自动给锁续上新的30s。
//加锁的业务只要运行完成,就不会给当前锁续期,及时不手动解锁,锁默认在30s以后自动删除。
lock.lock();
//加时间的锁,10s自动解锁,自动解锁时间一定要大于业务的执行时间,锁到期后不会自动续期
//加了超时时间,就发送给lua脚本,进行占锁,不会自动续期
//如果未指定锁的超时时间,就使用30*1000[lockWatchdongTimeout看门狗的默认时间,续期时间是1/3看门狗时间]
lock.lock(10,TimeUnit.SECONDS);
try{
....业务执行
}
catch(Exception e){}
finally{
//解锁 假设解锁代码没有运行,redisson不会出现死锁
lock.unlock();
}
读写锁
RReadWriteLock rwlock = redisson.getReadWriteLock("lock");
rwlock.readLock().lock();
rwlock.writeLock().lock();