Redison提供了看门狗机制实现Redis分布式锁的自动续期。
//1、获取一把锁,只要锁的名字一样,就是同一把锁
RLock lock = redisson.getLock("my-lock");
//2、加锁
lock.lock(30,TimeUnit.SECONDS); // 省掉了整个续期操作。手动解锁
lock.lock(); //默认加的锁都是30s时间。看门狗机制自动续期。
如上,Redison加分布式锁的两个重载方法。
方法一:
lock.lock(30,TimeUnit.SECONDS);
- 我们传递了锁的超时时间,就发送给redis执行脚本,进行占锁,默认超时就是我们指定的时间。
- 在锁时间到了以后,不会自动续期。
方法二 (看门狗机制)
lock.lock();
- 如果我们未指定锁的超时时间,就使用30 * 1000(LockWatchdogTimeout看门狗的默认时间);
- 只要占锁成功,就会启动一个定时任务,每隔10s (看门狗时间 / 3)都会自动再次续期,续成30s;
- 加锁的业务只要运行完成,就不会给当前锁续期,即使不手动解锁,锁默认在30s以后自动删除。