Redisson看门狗

1、互斥性;

防止多个进程及线程并发访问共享资源,使得资源串行访问操作。

2、设置锁过期时间;

为了防止锁悬挂,因为服务宕机,锁不释放问题,其它请求就无法获取锁。

3、自动续锁超时时间;

防止业务超时,超过锁过期时间自动释放,打破互斥性。

4、多条指令需要原子性;

lua脚本实现多个指令的加锁、解锁及续锁的原子性。

5、可重入性;

使用线程ID信息来保证同一线程请求锁的可重入性。

6、锁误删:自己把别人持有的锁删了;

多个客户端释放锁,如何防止自己删别人的或者别人删自己申请的锁。

获取锁之前,生成全局唯一id,判断是否是自己的id来避免。

7、锁等待:发布订阅机制通知等待锁的线程;

看门狗

Redisson加锁的核心代码,本质也是通过redis的lua脚本;

waitTime:等待时间;在锁状态变为可持有之前,等待的时间,如果在这个时间内,锁一直被其他客户端线程持有,则放弃等待,返回失败;

leaseTime:持有时间;客户端获取到锁之后的最长持有时间,如果设置此参数为10秒,则10秒后,如果此客户端不释放锁,则有redis自行释放,以免造成死锁。

lockWatchdogTimeout:看门狗时间;如果客户端不设定持有时间,则持有时间会被设置为看门狗时间,默认为30秒。

Last Updated:
Contributors: 拔土豆的程序员