Redisson分布式锁原理

2025-01-11 NEW个对象

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

推荐文章