Redisson分布式锁原理
1、线程1 获取到锁,执行lua脚本,并开启一个定时任务,每10秒给锁续期。
2、线程2获取不到锁,就while不停尝试获取锁,直到获取到锁为止。
分布式锁三大特性:
1、互斥,一个线程获取锁了之后,其它线程获取不到了
2、防止死锁,避免出现循环等待的情况
3、可重入,一个线程可以重复拿到同一个资源的锁。
来看看Redisson是如何解决这些问题:
互斥:
1、Redisson 使用 Redis 的 SET key value NX PX ttl 命令来实现锁的获取。
2、唯一标识:value为uuid + ThreadId。
3、为了保证加锁和释放锁的操作具有原子性,Redisson 使用 Lua 脚本执行相关操作。
防止死锁:
看门狗,看门狗无限续期。
无限续期是否会导致锁无法释放,如果看门狗出现问题、服务器宕机则看门狗机制就不会续期。
如果程序正常运行,程序没有执行玩,那么锁就应该一直持有,所以此时应该考虑代码逻辑是否有问题。
可重入:
1、Redisson 使用 Redis 的 Hash 结构来记录锁的重入信息。
2、key为锁的名称
3、value为线程的唯一标识 (UUID + threadId) 和锁的重入次数
上一篇:无
下一篇:nacos服务注册原理
相关文章
-
Redisson分布式锁原理
1、线程1 获取到锁,执行lua脚本,并开启一个定时任务,每10秒给锁续期。 2、线程2获取不到锁,就while不停尝试获取锁,直到获取到锁为止。
NEW个对象 2025-01-11