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) 和锁的重入次数
下一篇:SpringBoot常用注解总结
相关文章
-
BigDecimal
为什么不能用BigDecimal的equals方法做等值比较? 两个BigDecimal的数值进行比较的话,可以使用compareTo方法。 以:0.1和0.10为例子,equals会比较value和精度,很显然这两个数的精度不一样,会返回false
NEW个对象 2025-02-11
-
再次理解:事务传播机制
父事务和子事务,在事务方法里调用了其它事务的方法,子事务如何执行: 1、父方法有事务。 2、父方法没有事务。 子方法事务该如何执行,有几种情况,根据这些情况,设置了七种传播基本。
NEW个对象 2025-03-06
-
微信登录和基于授权码模式的单点登录,四个角色分别是什么?
微信登录和基于授权码模式的单点登录,四个角色分别是什么?
NEW个对象 2026-06-13