Redis分布式锁的原理以及如何续期

目录

面试问题

问题分析

如何回答

底层原理 

(1)加锁机制

为什么要重复加锁?

为啥要用lua脚本呢?

(2)锁互斥机制

(3)watch dog自动延期机制

(4)可重入加锁机制

(5)释放锁机制

(6)Redis分布式锁的缺点

参考文章


面试问题

Redis锁的过期时间小于业务的执行时间该如何续期?

问题分析

首先如果你之前用Redis的分布式锁的姿势正确,并且看过相应的官方文档的话,这个问题So easy.我们来看

很多同学在用分布式锁时,都是直接百度搜索找一个Redis分布式锁工具类就直接用了,其实Redis分布式锁比较正确的姿势是采用redisson这个客户端工具

如何回答

Redisson 的 Watch Dog 机制

只要客户端一旦加锁成功,就会启动一个watch dog看门狗,他是一个后台线程,会每隔10秒检查一下,如果客户端还持有锁key,那么就会不断的延长锁key的生存时间。

默认情况下,加锁的时间是30秒,.如果加锁的业务没有执行完,就会进行一次续期,把锁重置成30秒

处理业务机器宕机的情况

watch dog 线程是由业务服务器(即运行 Redisson 客户端的服务器)发起和管理的。当业务执行的机器突然宕机或者出现网络分区时,watch dog 线程可能无法正常工作,这可能导致锁无法及时释放。为了处理这种情况,Redisson 提供了以下机制:

  • 锁的自动过期:即使 watch dog 无法续期,锁也会在到达其过期时间后自动释放。这确保了即使在宕机的情况下,其他客户端也能在一定时间后获得锁。
  • 锁的过期时间设置:在设置锁的过期时间时,应考虑业务逻辑的最大执行时间,并留出足够的余地以应对不可预见的延迟。

底层原理 

redisson实现Redis分布式锁的底层原理

拜托,面试请不要再问我Redis分布式锁的实现原理【石杉的架构笔记】

(1)加锁机制

咱们来看上面那张图,现在某个客户端要加锁。如果该客户端面对的是一个redis cluster集群,他首先会根据hash节点选择一台机器。

这里注意,仅仅只是选择一台机器!这点很关键!

紧接着,就会发送一段lua脚本到redis上,那段lua脚本如下所示:

为什么要重复加锁?

  1. 可重入性:可重入锁(Reentrant Lock)意味着同一个线程可以对同一把锁多次加锁。这在递归调用或者多次访问共享资源时非常有用,因为它允许同一

  • 19
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 42
    评论
评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据与算法架构提升之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值