1. 首页
  2. >
  3. 数据库技术
  4. >
  5. Redis

Redisson 3.15.0 新特性spinLock和其它

Redisson 3.15.0发布了,带来了Apache Tomcat 10的支持,以及spin lock


Redisson 3.15.0 新特性spinLock和其它

先看spinLock

目前支持四种编程模式,一种原生,一种Async 异步,一种Reactive, 一种RxJava 2

看原生的

RLock lock = redisson.getSpinLock("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();    } }

加锁还可以自动过N秒后自动释放,对于分布式系统,拿Redis做锁,是个不错的选择,新版本的Redisson终于提供了支持。

官方对spinLock的解读:

Redis基于Java的分布式可重入自旋锁对象,实现了锁接口。

在很短的时间间隔内获得/释放数千个或更多的锁可能会导致达到网络吞吐量限制和Redis CPU过载,因为锁定对象的pubsub使用。这是由于Redis的pubsub消息被分发到集群中的所有节点。默认情况下,Spin Lock使用指数回退策略来获取锁而不是pubsub channel。

如果Redisson实例获得的锁崩溃,那么该锁将永远挂起在获得状态。为了避免这种情况发生,Redisson会维护lock watchdog,它会在Redisson实例还活着的时候延长锁的过期时间。lock watchdog timeout默认为30秒,可以通过配置进行修改。lockWatchdogTimeout设置。

同样,Redisson允许在锁定获取期间指定leaseTime参数。在指定的时间间隔后,锁将自动释放。

RLock对象的行为符合Java锁规范。这意味着只有锁所有者线程可以解锁它,否则抛出IllegalMonitorStateException。否则考虑使用RSemaphore对象。