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服务注册原理
相关文章
-
XXLJOB的运行模式
BEAN 模式(用到最多) 是 XXL-JOB 的默认运行模式,任务的执行逻辑由 Spring Bean 提供。通过配置任务时指定 Bean Name 和对应的方法,调度中心会调用该方法完成任务的执行。
NEW个对象 2025-01-16
-
gateway集成sentinel
gateway集成sentinel
NEW个对象 2025-01-16
-
nacos服务注册原理
nacos服务注册需要具备以下能力: 1、服务提供者把自己的协议地址注册到Nacos server。 2、服务消费者需要从Nacos Server上去查询服务提供者的地址(根据服务名称)。 3、Nacos Server需要感知到服务提供者的上下线的变化。 4、服务消费者需要动态感知到Nacos Server端服务地址的变化。
NEW个对象 2025-01-12