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服务注册原理

相关文章

  • Redisson分布式锁原理

    1、线程1 获取到锁,执行lua脚本,并开启一个定时任务,每10秒给锁续期。 2、线程2获取不到锁,就while不停尝试获取锁,直到获取到锁为止。

    NEW个对象 2025-01-11

推荐文章