深圳营销网站建设公司排名,中国纪检监察报电子版在线阅读,视觉传达设计主要学什么,安徽鸿顺鑫城建设集团网站一、锁定基于Redis的Java分布式可重入锁对象#xff0c;并实现了锁接口。如果获取锁的Redisson实例崩溃#xff0c;则此类锁可能会在获取状态下永久挂起。为了避免这种Redisson维护锁看门狗#xff0c;当锁持有者Redisson实例处于活动状态时#xff0c;它会延长锁的到期时间…一、锁定基于Redis的Java分布式可重入锁对象并实现了锁接口。如果获取锁的Redisson实例崩溃则此类锁可能会在获取状态下永久挂起。为了避免这种Redisson维护锁看门狗当锁持有者Redisson实例处于活动状态时它会延长锁的到期时间。默认情况下锁看门狗超时为30秒可以通过Config.lockWatchdogTimeout设置进行更改。可以定义锁获取期间的leaseTime参数。在指定的时间间隔后锁定的锁将自动释放。RLock对象的行为符合Java Lock规范。这意味着只有锁所有者线程才能解锁它否则将引发IllegalMonitorStateException。否则请考虑使用RSemaphore对象。代码示例RLock lock redisson.getLock(myLock);// traditional lock method
lock.lock();// or acquire lock and automatically unlock it after 10 seconds
lock.lock(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
boolean res lock.tryLock(100, 10, TimeUnit.SECONDS);
if (res) {try {...} finally {lock.unlock();}
}异步接口用法的代码示例RLock lock redisson.getLock(myLock);RFutureVoid lockFuture lock.lockAsync();// or acquire lock and automatically unlock it after 10 seconds
RFutureVoid lockFuture lock.lockAsync(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
RFutureBoolean lockFuture lock.tryLockAsync(100, 10, TimeUnit.SECONDS);lockFuture.whenComplete((res, exception) - {// ...lock.unlockAsync();
});反应式接口用法的代码示例RedissonReactiveClient redisson redissonClient.reactive();
RLockReactive lock redisson.getLock(myLock);MonoVoid lockMono lock.lock();// or acquire lock and automatically unlock it after 10 seconds
MonoVoid lockMono lock.lock(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
MonoBoolean lockMono lock.tryLock(100, 10, TimeUnit.SECONDS);lockMono.doOnNext(res - {// ...
})
.doFinally(lock.unlock())
.subscribe();RxJava3 接口使用的代码示例RedissonRxClient redisson redissonClient.rxJava();
RLockRx lock redisson.getLock(myLock);Completable lockRes lock.lock();// or acquire lock and automatically unlock it after 10 seconds
Completable lockRes lock.lock(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
SingleBoolean lockRes lock.tryLock(100, 10, TimeUnit.SECONDS);lockRes.doOnSuccess(res - {// ...
})
.doFinally(lock.unlock())
.subscribe();二、公平锁定基于Redis的分布式可重入公平Java锁对象实现了锁接口。公平锁保证线程将按照请求的顺序获取它。所有等待的线程都将排队如果某个线程已死亡Redisson将等待其返回5秒。例如如果5个线程由于某种原因而死亡那么延迟将为25秒。如果获取锁的Redisson实例崩溃则此类锁可能会在获取状态下永久挂起。为了避免这种Redisson维护锁看门狗当锁持有者Redisson实例处于活动状态时它会延长锁的到期时间。默认情况下锁看门狗超时为30秒可以通过Config.lockWatchdogTimeout设置进行更改。可以定义锁获取期间的leaseTime参数。在指定的时间间隔后锁定的锁将自动释放。RLock对象的行为符合Java Lock规范。这意味着只有锁所有者线程才能解锁它否则将引发IllegalMonitorStateException。否则请考虑使用RSemaphore对象。代码示例RLock lock redisson.getFairLock(myLock);// traditional lock method
lock.lock();// or acquire lock and automatically unlock it after 10 seconds
lock.lock(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
boolean res lock.tryLock(100, 10, TimeUnit.SECONDS);
if (res) {try {...} finally {lock.unlock();}
}异步接口用法的代码示例RLock lock redisson.getFairLock(myLock);RFutureVoid lockFuture lock.lockAsync();// or acquire lock and automatically unlock it after 10 seconds
RFutureVoid lockFuture lock.lockAsync(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
RFutureBoolean lockFuture lock.tryLockAsync(100, 10, TimeUnit.SECONDS);lockFuture.whenComplete((res, exception) - {// ...lock.unlockAsync();
});Reactive接口 用法的代码示例:RedissonReactiveClient redisson redissonClient.reactive();
RLockReactive lock redisson.getFairLock(myLock);MonoVoid lockMono lock.lock();// or acquire lock and automatically unlock it after 10 seconds
MonoVoid lockMono lock.lock(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
MonoBoolean lockMono lock.tryLock(100, 10, TimeUnit.SECONDS);lockMono.doOnNext(res - {// ...
})
.doFinally(lock.unlock())
.subscribe();RxJava3 接口使用的代码示例RedissonRxClient redisson redissonClient.rxJava();
RLockRx lock redisson.getFairLock(myLock);Completable lockRes lock.lock();// or acquire lock and automatically unlock it after 10 seconds
Completable lockRes lock.lock(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
SingleBoolean lockRes lock.tryLock(100, 10, TimeUnit.SECONDS);lockRes.doOnSuccess(res - {// ...
})
.doFinally(lock.unlock())
.subscribe();三、多重锁基于Redis的分布式MultiLock对象允许将Lock对象分组并将其作为单个锁处理。每个RLock对象可能属于不同的Redisson实例。如果获取MultiLock的Redisson实例崩溃那么这样的MultiLock可能会永远挂在获取状态。为了避免这种Redisson维护锁看门狗当锁持有者Redisson实例处于活动状态时它会延长锁的到期时间。默认情况下锁看门狗超时为30秒可以通过Config.lockWatchdogTimeout设置进行更改。可以定义锁获取期间的leaseTime参数。在指定的时间间隔后锁定的锁将自动释放。MultiLock对象的行为符合Java Lock规范。这意味着只有锁所有者线程才能解锁它否则将引发IllegalMonitorStateException。否则请考虑使用RSemaphore对象。代码示例RLock lock1 redisson1.getLock(lock1);
RLock lock2 redisson2.getLock(lock2);
RLock lock3 redisson3.getLock(lock3);RLock multiLock anyRedisson.getMultiLock(lock1, lock2, lock3);// traditional lock method
multiLock.lock();// or acquire lock and automatically unlock it after 10 seconds
multiLock.lock(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
boolean res multiLock.tryLock(100, 10, TimeUnit.SECONDS);
if (res) {try {...} finally {multiLock.unlock();}
}异步接口用法的代码示例RLock lock1 redisson1.getLock(lock1);
RLock lock2 redisson2.getLock(lock2);
RLock lock3 redisson3.getLock(lock3);RLock multiLock anyRedisson.getMultiLock(lock1, lock2, lock3);RFutureVoid lockFuture multiLock.lockAsync();// or acquire lock and automatically unlock it after 10 seconds
RFutureVoid lockFuture multiLock.lockAsync(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
RFutureBoolean lockFuture multiLock.tryLockAsync(100, 10, TimeUnit.SECONDS);lockFuture.whenComplete((res, exception) - {// ...multiLock.unlockAsync();
});
反应式接口用法的代码示例RedissonReactiveClient anyRedisson redissonClient.reactive();RLockReactive lock1 redisson1.getLock(lock1);
RLockReactive lock2 redisson2.getLock(lock2);
RLockReactive lock3 redisson3.getLock(lock3);RLockReactive multiLock anyRedisson.getMultiLock(lock1, lock2, lock3);MonoVoid lockMono multiLock.lock();// or acquire lock and automatically unlock it after 10 seconds
MonoVoid lockMono multiLock.lock(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
MonoBoolean lockMono multiLock.tryLock(100, 10, TimeUnit.SECONDS);lockMono.doOnNext(res - {// ...
})
.doFinally(multiLock.unlock())
.subscribe();RxJava3 接口使用的代码示例RedissonRxClient anyRedisson redissonClient.rxJava();RLockRx lock1 redisson1.getLock(lock1);
RLockRx lock2 redisson2.getLock(lock2);
RLockRx lock3 redisson3.getLock(lock3);RLockRx multiLock anyRedisson.getMultiLock(lock1, lock2, lock3);Completable lockRes multiLock.lock();// or acquire lock and automatically unlock it after 10 seconds
Completable lockRes multiLock.lock(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
SingleBoolean lockRes multiLock.tryLock(100, 10, TimeUnit.SECONDS);lockRes.doOnSuccess(res - {// ...
})
.doFinally(multiLock.unlock())
.subscribe();四、读写锁定基于Redis的Java分布式可重入读写锁对象实现了读写锁接口。读和写锁都实现RLock接口。只允许有多个ReadLock所有者和一个WriteLock所有者。如果获取锁的Redisson实例崩溃则此类锁可能会在获取状态下永久挂起。为了避免这种Redisson维护锁看门狗当锁持有者Redisson实例处于活动状态时它会延长锁的到期时间。默认情况下锁看门狗超时为30秒可以通过Config.lockWatchdogTimeout设置进行更改。此外Redisson允许在获取锁期间指定leaseTime参数。在指定的时间间隔后锁定的锁将自动释放。RLock对象的行为符合Java Lock规范。这意味着只有锁所有者线程才能解锁它否则将引发IllegalMonitorStateException。否则请考虑使用RSemaphore对象。代码示例RReadWriteLock rwlock redisson.getReadWriteLock(myLock);RLock lock rwlock.readLock();
// or
RLock lock rwlock.writeLock();// traditional lock method
lock.lock();// or acquire lock and automatically unlock it after 10 seconds
lock.lock(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
boolean res lock.tryLock(100, 10, TimeUnit.SECONDS);
if (res) {try {...} finally {lock.unlock();}
}异步接口用法的代码示例RReadWriteLock rwlock redisson.getReadWriteLock(myLock);RLock lock rwlock.readLock();
// or
RLock lock rwlock.writeLock();RFutureVoid lockFuture lock.lockAsync();// or acquire lock and automatically unlock it after 10 seconds
RFutureVoid lockFuture lock.lockAsync(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
RFutureBoolean lockFuture lock.tryLockAsync(100, 10, TimeUnit.SECONDS);lockFuture.whenComplete((res, exception) - {// ...lock.unlockAsync();
});
反应式接口用法的代码示例RedissonReactiveClient redisson redissonClient.reactive();RReadWriteLockReactive rwlock redisson.getReadWriteLock(myLock);RLockReactive lock rwlock.readLock();
// or
RLockReactive lock rwlock.writeLock();MonoVoid lockMono lock.lock();// or acquire lock and automatically unlock it after 10 seconds
MonoVoid lockMono lock.lock(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
MonoBoolean lockMono lock.tryLock(100, 10, TimeUnit.SECONDS);lockMono.doOnNext(res - {// ...
})
.doFinally(lock.unlock())
.subscribe();RxJava3 接口使用的代码示例RedissonRxClient redisson redissonClient.rxJava();RReadWriteLockRx rwlock redisson.getReadWriteLock(myLock);RLockRx lock rwlock.readLock();
// or
RLockRx lock rwlock.writeLock();Completable lockRes lock.lock();// or acquire lock and automatically unlock it after 10 seconds
Completable lockRes lock.lock(10, TimeUnit.SECONDS);// or wait for lock aquisition up to 100 seconds
// and automatically unlock it after 10 seconds
SingleBoolean lockRes lock.tryLock(100, 10, TimeUnit.SECONDS);lockRes.doOnSuccess(res - {// ...
})
.doFinally(lock.unlock())
.subscribe();五、信号量基于Redis的分布式Java信号量对象类似于信号量对象。可以在使用前初始化但这不是必需的通过trySetPermissionspermissions方法获得可用的许可量。代码示例RSemaphore semaphore redisson.getSemaphore(mySemaphore);// acquire single permit
semaphore.acquire();// or acquire 10 permits
semaphore.acquire(10);// or try to acquire permit
boolean res semaphore.tryAcquire();// or try to acquire permit or wait up to 15 seconds
boolean res semaphore.tryAcquire(15, TimeUnit.SECONDS);// or try to acquire 10 permit
boolean res semaphore.tryAcquire(10);// or try to acquire 10 permits or wait up to 15 seconds
boolean res semaphore.tryAcquire(10, 15, TimeUnit.SECONDS);
if (res) {try {...} finally {semaphore.release();}
}异步接口用法的代码示例RSemaphore semaphore redisson.getSemaphore(mySemaphore);// acquire single permit
RFutureVoid acquireFuture semaphore.acquireAsync();// or acquire 10 permits
RFutureVoid acquireFuture semaphore.acquireAsync(10);// or try to acquire permit
RFutureBoolean acquireFuture semaphore.tryAcquireAsync();// or try to acquire permit or wait up to 15 seconds
RFutureBoolean acquireFuture semaphore.tryAcquireAsync(15, TimeUnit.SECONDS);// or try to acquire 10 permit
RFutureBoolean acquireFuture semaphore.tryAcquireAsync(10);// or try to acquire 10 permits or wait up to 15 seconds
RFutureBoolean acquireFuture semaphore.tryAcquireAsync(10, 15, TimeUnit.SECONDS);acquireFuture.whenComplete((res, exception) - {// ...semaphore.releaseAsync();
});反应式接口用法的代码示例RedissonReactiveClient redisson redissonClient.reactive();RSemaphoreReactive semaphore redisson.getSemaphore(mySemaphore);// acquire single permit
MonoVoid acquireMono semaphore.acquire();// or acquire 10 permits
MonoVoid acquireMono semaphore.acquire(10);// or try to acquire permit
MonoBoolean acquireMono semaphore.tryAcquire();// or try to acquire permit or wait up to 15 seconds
MonoBoolean acquireMono semaphore.tryAcquire(15, TimeUnit.SECONDS);// or try to acquire 10 permit
MonoBoolean acquireMono semaphore.tryAcquire(10);// or try to acquire 10 permits or wait up to 15 seconds
MonoBoolean acquireMono semaphore.tryAcquire(10, 15, TimeUnit.SECONDS);acquireMono.doOnNext(res - {// ...
})
.doFinally(semaphore.release())
.subscribe();RxJava3 接口使用的代码示例RedissonRxClient redisson redissonClient.rxJava();RSemaphoreRx semaphore redisson.getSemaphore(mySemaphore);// acquire single permit
Completable acquireRx semaphore.acquire();// or acquire 10 permits
Completable acquireRx semaphore.acquire(10);// or try to acquire permit
SingleBoolean acquireRx semaphore.tryAcquire();// or try to acquire permit or wait up to 15 seconds
SingleBoolean acquireRx semaphore.tryAcquire(15, TimeUnit.SECONDS);// or try to acquire 10 permit
SingleBoolean acquireRx semaphore.tryAcquire(10);// or try to acquire 10 permits or wait up to 15 seconds
SingleBoolean acquireRx semaphore.tryAcquire(10, 15, TimeUnit.SECONDS);acquireRx.doOnSuccess(res - {// ...
})
.doFinally(semaphore.release())
.subscribe();