分布式锁和同步器
Lock
Redisson 分布式可重入锁,实现了 接口并支持 TTL。
Redisson 也支持 Lock 对象的异步方法:
RLock lock = redisson.getLock("anyLock");
lock.lockAsync();
lock.lockAsync(10, TimeUnit.SECONDS);
Future<Boolean> res = lock.tryLockAsync(100, 10, TimeUnit.SECONDS);
Redisson 也支持公平锁对象的异步方法:
RLock fairLock = redisson.getFairLock("anyLock");
fairLock.lockAsync();
fairLock.lockAsync(10, TimeUnit.SECONDS);
MultiLock
RedissonMultiLock
对象可用于实现 Redlock 锁算法。
它将多个 RLock
对象划为一组并且将它们当作一个锁来处理。
每个 RLock
对象可以属于不同的 Redisson 实例。
Redisson 分布式可重入 ReadWriteLock 对象,实现了 java.util.concurrent.locks.ReadWriteLock
接口并支持 TTL。
可以同时存在多个 ReadLock 拥有者,但仅允许有一个
RReadWriteLock rwlock = redisson.getLock("anyRWLock");
// Most familiar locking method
rwlock.readLock().lock();
// or
rwlock.writeLock().lock();
// Lock time-to-live support
// releases lock automatically after 10 seconds
// if unlock method not invoked
rwlock.readLock().lock(10, TimeUnit.SECONDS);
// or
rwlock.writeLock().lock(10, TimeUnit.SECONDS);
boolean res = rwlock.readLock().tryLock(100, 10, TimeUnit.SECONDS);
// or
boolean res = rwlock.writeLock().tryLock(100, 10, TimeUnit.SECONDS);
...
lock.unlock();
Semaphore
Redisson 分布式 Semaphore 对象,类似于 java.util.concurrent.Semaphore
对象。
RCountDownLatch latch = redisson.getCountDownLatch("anyCountDownLatch");
latch.trySetCount(1);
latch.await();
// in other thread or other JVM
RCountDownLatch latch = redisson.getCountDownLatch("anyCountDownLatch");