【分布式锁篇】Redisson源码分析

文章详细分析了Redisson如何使用Lua脚本来保证分布式锁的原子性和可重入性,同时介绍了看门狗机制,该机制通过定期续约防止锁意外过期,确保线程安全。此外,文中指出Redisson的锁默认有30s的过期时间,并讨论了不同锁获取方式对看门狗机制的影响。

Redisson细节分析

一、放开思维,思考redis分布式锁问题

1)redis 实现分布式锁命令: setnx (key,value,expireTime) , key就是锁的资源,value可以用uuid这种,为了防止机器宕机出现死锁,这里可以设置个有效时间。
2)如果代码执行完的话,就需要把锁去掉,让给其他线程争抢。那这里需要考虑3点:
获取锁是否存在,再判断锁是否相等,再去删除,

要思考为什么要引入后续的redisson框架

在这里插入图片描述

由于redis它执行网络命令是单线程执行,在redis执行的时候,可能就无法保证这3条命令的原子性了,所以这里得用lua脚本去保证。

为什么Redis无法保证3条命令原子性呢?(伪代码分析)
答案:其实这3条命令,每一条命令在redis里面都是原子性,但是由于网络问题,可能会出现其他线程争抢,导致这3条命令无法按顺序被Redis一一执行,就不能保证原子性。
我举个例子吧。我们锁执行完后,是不是要删除给其他线程使用,那么我们如果单独写以下伪代码(包括请求Redis三条命令)
1)A线程 hasKey() 判断是否存在
2)A线程 keyValue==UUID+ThreadID
3)A线程如果相等,那么就做del锁,这时候如果你的锁刚好到期了,然后B线程lock住了,然后你这时候del的话,岂不是就把别人的锁删了,就违背分布式锁的意愿了
下面来段伪代码

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值