分布式锁和同步器

Lock

Redisson 分布式可重入锁,实现了 接口并支持 TTL。

Redisson 也支持 Lock 对象的异步方法:

  1. RLock lock = redisson.getLock("anyLock");
  2. lock.lockAsync();
  3. lock.lockAsync(10, TimeUnit.SECONDS);
  4. Future<Boolean> res = lock.tryLockAsync(100, 10, TimeUnit.SECONDS);

Redisson 也支持公平锁对象的异步方法:

  1. RLock fairLock = redisson.getFairLock("anyLock");
  2. fairLock.lockAsync();
  3. fairLock.lockAsync(10, TimeUnit.SECONDS);

MultiLock

RedissonMultiLock 对象可用于实现 Redlock 锁算法。
它将多个 RLock 对象划为一组并且将它们当作一个锁来处理。
每个 RLock 对象可以属于不同的 Redisson 实例。

Redisson 分布式可重入 ReadWriteLock 对象,实现了 java.util.concurrent.locks.ReadWriteLock 接口并支持 TTL。
可以同时存在多个 ReadLock 拥有者,但仅允许有一个

  1. RReadWriteLock rwlock = redisson.getLock("anyRWLock");
  2. // Most familiar locking method
  3. rwlock.readLock().lock();
  4. // or
  5. rwlock.writeLock().lock();
  6. // Lock time-to-live support
  7. // releases lock automatically after 10 seconds
  8. // if unlock method not invoked
  9. rwlock.readLock().lock(10, TimeUnit.SECONDS);
  10. // or
  11. rwlock.writeLock().lock(10, TimeUnit.SECONDS);
  12. boolean res = rwlock.readLock().tryLock(100, 10, TimeUnit.SECONDS);
  13. // or
  14. boolean res = rwlock.writeLock().tryLock(100, 10, TimeUnit.SECONDS);
  15. ...
  16. lock.unlock();

Semaphore

Redisson 分布式 Semaphore 对象,类似于 java.util.concurrent.Semaphore 对象。

  1. RCountDownLatch latch = redisson.getCountDownLatch("anyCountDownLatch");
  2. latch.trySetCount(1);
  3. latch.await();
  4. // in other thread or other JVM
  5. RCountDownLatch latch = redisson.getCountDownLatch("anyCountDownLatch");