面试官问我,Redis分布式锁如何续期?

面试官总问Redis分布式锁?从Redisson源码角度聊聊看门狗机制和锁续期到底怎么实现的 本文深入解析Redis分布式锁中Redisson的看门狗机制与锁续期实现原理。通过源码分析揭示自动续期、定时检查等核心设计,对比传统RedisTemplate方案的不足,展示Redisson如何通过后台线程动态延长锁时间,确保分布式系统数据一致性。 阅读详情

真实案例

Redis分布式锁的正确姿势

据肥朝了解,很多同学在用分布式锁时,都是直接百度搜索找一个Redis分布式锁工具类就直接用了.关键是该工具类中还充斥着很多System.out.println();等语句.其实Redis分布式锁比较正确的姿势是采用redisson这个客户端工具.具体介绍可以搜索最大的同性交友网站github.

如何回答

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

坦白说,如果你英文棒棒哒那么看英文文档可能更好理解

By default lock watchdog timeout is 30 seconds and can be changed through Config.lockWatchdogTimeout setting.

但是你如果看的是中文文档

看门狗检查锁的超时时间默认是30秒

这句话肥朝从语文角度分析就是一个歧义句,他有两个意思

1.看门狗默认30秒去检查一次锁的超时时间
2.看们狗会去检查锁的超时时间,锁的时间时间默认是30秒

看到这里,我希望大家不要黑我的小学体育老师,虽然他和语文老师是同个人.语文不行,我们可以源码来凑!

源码分析

我们根据官方文档给出的例子,写了一个最简单的demo,例子根据上面截图中Ctr+C和Ctr+V一波操作,如下

create

从这里我们知道,internalLockLeaseTime 和 lockWatchdogTimeout这两个参数是相等的.

lockWatchdogTimeout默认值如下

从internalLockLeaseTime这个单词也可以看出,这个加的分布式锁的超时时间默认是30秒.但是还有一个问题,那就是这个看门狗,多久来延长一次有效期呢?我们往下看

lock

从我图中框起来的地方我们就知道了,获取锁成功就会开启一个定时任务,也就是watchdog,定时任务会定期检查去续期renewExpirationAsync(threadId).

这里定时用的是netty-common包中的HashedWheelTimer,肥朝公众号已经和各大搜索引擎建立了密切的合作关系,你只需要把这个类在任何搜索引擎一搜,都能知道相关API参数的意义.

从图中我们明白,该定时调度每次调用的时间差是internalLockLeaseTime / 3.也就10秒.

真相大白

通过源码分析我们知道,默认情况下,加锁的时间是30秒.如果加锁的业务没有执行完,那么到 30-10 = 20秒的时候,就会进行一次续期,把锁重置成30秒.那这个时候可能又有同学问了,那业务的机器万一宕机了呢?宕机了定时任务跑不了,就续不了期,那自然30秒之后锁就解开了呗.

大厂面试官问我:Redis的分布式锁怎么解决死锁问题?【后端八股文十:Redis分布式锁八股文合集(2)】 Redisson在Redis的基础上,实现了可重入锁、公平锁、联锁等多种类型的分布式锁。可重入锁通过维护一个持有锁的线程ID和锁的持有次数来实现。公平锁通过维护一个等待队列,按照请求顺序依次获取锁。联锁允许同时获取多个锁,只有全部获取成功才算获取锁成功。 阅读详情

相关推荐

美团面试:Redis锁如何续期?Redis锁超时,任务没完怎么办?

Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还实现了可重入锁(Reentrant Lock)、公平锁(Fair Lock、联锁(MultiLock)、 红锁(RedLock)、 读写锁(ReadWriteLock)等,还提供了许多分布式服务。Redisson提供了使用Redis的最简单和最便捷的方法。

架构师尼恩 3001

Redis 分布式锁如何实现自动续期

点击关注公众号,利用碎片时间学习Redis 实现分布式锁指定一个 key 作为锁标记,存入 Redis 中,指定一个 唯一的用户标识作为 value。当 key 不存在时才能设置值,确保同一时间只有一个客户端进程获得锁,满足互斥性特性。设置一个过期时间,防止因系统异常导致没能删除这个 key,满足防死锁特性。当处理完业务之后需要清除这个 key 来释放锁,清除 key 时需要校验 value 值,...

Java笔记虾 541

手把手教你用VM实现欧姆龙PLC数据采集(含Fins协议配置详解)

本文详细介绍了如何使用VM(VisionMaster)实现与欧姆龙PLC的数据采集,重点解析了Fins协议(包括Fins TCP/UDP)的配置步骤。从网络环境搭建、PLC的IP地址设置,到VM端Fins通讯通道的详细配置与数据点映射,提供了完整的实战指南。文章还涵盖了数据收发解析、常见问题排查清单,帮助工程师快速完成视觉系统与PLC的稳定集成。

weixin_29171087的博客 189

Redis分布式锁如何自动续期

Redis 实现分布式锁 指定一个 key 作为锁标记,存入 Redis 中,指定一个 唯一的用户标识作为 value。 当 key 不存在时才能设置值,确保同一时间只有一个客户端进程获得锁,满足互斥性特性。 设置一个过期时间,防止因系统异常导致没能删除这个 key,满足防死锁特性。 当处理完业务之后需要清除这个 key 来释放锁,清除 key 时需要校验 value 值,需要满足只有加锁的人才能释放锁 。 问题 如果这个锁的过期时间是30秒,但是业务运行超过了30秒,比如40秒,当业务运行到30秒的时

张三李四王五老六 5590

定时移动鼠标点击鼠标,防止电脑息屏的vba脚本

定时移动鼠标,使系统始终处于激活状态,防止系统息屏。

panfei263031的博客 5933

YOLOv8独家原创改进:原创自研 | 自研独家创新DSAM注意力 ,基于BiLevelRoutingAttention注意力升级

提出新颖的注意力DSAM(Deformable Bi-level SpatialAttention Module),创新度极佳,适合科研创新,效果秒杀CBAM,Channel Attention+Spartial Attention升级为新颖的Deformable Bi-level Attention+Spartial Attention

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1516

图解Redisson如何实现分布式锁、锁续约?

Redisson实现分布式锁案例、Redisson连接Redis的四种方式、Redisson分布式锁用到的Redis命令/ LUA脚本语义,RLock详述,Redisson分布式锁加锁流程,RedisCluster集群中应该加锁到哪个master节点,详述看门狗机制/锁续约,可重入锁机制,锁竞争处理方式,Redisson分布式锁释放流程(包括:主动释放、主动强制释放、Client宕机被动释放、不启动锁续约的超时释放)

健身变秃,coding变强 1万+

Android 12.0 系统开机设置默认横屏显示

在12.0的系统产品开发中,对于产品需求来说,由于是宽屏设备所以产品需要开机默认横屏显示,开机横屏显示这就需要从两部分来实现,一部分是开机动画横屏显示,另一部分是系统显示横屏显示,从这两方面就可以做到开机默认横屏显示了。

安卓兼职framework和app工程师的博客 3745

面试官问:Redis 分布式锁如何自动续期?

面试官问:Redis 分布式锁如何自动续期?

技术专家 696

基于Simulink的电力电子系统电磁兼容性(EMC)仿真

在电力电子系统中,由于高频开关器件的存在,会产生大量的电磁干扰(EMI),这对系统的稳定性和可靠性提出了挑战。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证电力电子系统的电磁兼容性。本教程将详细介绍如何使用 Simulink 进行电力电子系统的电磁兼容性仿真。通过本教程,我们详细介绍了如何使用 Simulink 进行电力电子系统的电磁兼容性仿真。为了模拟电力电子系统中的电磁干扰(EMI),我们需要添加噪声源模块。为了更好地分析系统的电磁兼容性特性,可以在模型中添加频谱分析工具。

amy_mhd的博客 1127

Istio ICA考试之路---2-2

找到dr部分,这部分可以在mirroring里找也可以和题2-1一样在Traffic Management的dr里复制,内容都一样。此题之后都是在cluster-2上操作,所以就不需要再切换了.之后的几题2.1节就忽略掉了。可以看到,80%的流量被镜像到了dev上,实际考试这步可以忽略。看到ex-ip是192.168.126.220。获取gw,把gateways加入到vs配置中。获取istio-ingress的ex-ip。就获得了这样一个模板文件。查看2个pod的日志。

Q先生 855

2024年网络安全最全pygame学习(二)——绘制线条、圆、矩形等图案_pygame(1),阿里P7亲自讲解

需要完整版PDF学习资源私我sys.exit()#python的退出程序import pygame #导包import syspygame.init() #初始化#绘制一个600*600的框框。

2401_84300255的博客 1276

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

congge 4232

面试官问我,Redis分布式锁如何续期?懵了。

前言上一篇[面试官问我,使用Dubbo有没有遇到一些坑?我笑了。]之后,又有一位粉丝和我说在面试过程中被虐了.鉴于这位粉丝是之前肥朝的粉丝,而且周一又要开启新一轮的面试,为了回馈他长期以来的支持,所以连夜写了本篇,希望能对他接下来的面试有所帮助.真实案例Redis分布式锁的正确姿势据肥朝了解,很多同学在用分布式锁时,都是直接百度搜索找一个Redis分布式锁工具类就直接用了.关键是该工具类中还充斥着...

weixin_34295316的博客 3286

Allegro 给元器件PCB封装库添加3D模型详细步骤

从上面视图可以看到模型跟PCB 库的方向是对了,但是位置偏下,且在PCB封装库后面,我们下面需要做的就是把模型往上移、往前移。首先将元器件3D模型文件放在封装库的目录下(也可以单独新建一个模型库文件夹),注意3D文件必须是Step格式。Transparent: 选择透视的对象,可以是模型、也可以是PCB封装,或者两种都透视。在左边搜索要添加的3D模型的文件(注意是在* 星号前面输入文件名),按回车即可找到。同样的,接下来需要往Y 负方向移,即左移,一边调整一边观察视图。

sinat_15677011的博客 3685

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

redis续期_面试官问我,Redis分布式锁如何续期?懵了

真实案例如何回答首先如果你之前用Redis的分布式锁的姿势正确,并且看过相应的官方文档的话,这个问题So easy.我们来看源码分析我们根据官方文档给出的例子,写了一个最简单的demo,例子根据上面截图中Ctr+C和Ctr+V一波操作,如下create从这里我们知道,internalLockLeaseTime 和 lockWatchdogTimeout这两个参数是相等的.lockWatchdogT...

weixin_39821718的博客 225

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

面试官问:Redis分布式锁如何自动续期?

Redis实现分布式锁指定一个 key 作为锁标记,存入 Redis 中,指定一个 唯一的用户标识作为 value。当 key 不存在时才能设置值,确保同一时间只有一个客户端进程获得锁,满足互斥性特性。设置一个过期时间,防止因系统异常导致没能删除这个 key,满足防死锁特性。当处理完业务之后需要清除这个 key 来释放锁,清除 key 时需要校验 value 值,需要满足只有加锁的人才能释放锁 。...

Java精选 133

【208期】面试官问:Redis 分布式锁如何自动续期?

点击上方“Java精选”,选择“设为星标”别问别人为什么,多问自己凭什么!下方有惊喜,留言必回,有问必答!每天08:15更新文章,每天进步一点点...Redis 实现分布式锁指定一个 ...

Java精选 313

面试官:Redis分布式锁如何续期?

一、真实案例 二、Redis分布式锁的正确姿势 很多同学在用分布式锁时,都是直接百度搜索找一个Redis分布式锁工具类就直接用了.关键是该工具类中还充斥着很多System.out.println();等语句.其实Redis分布式锁比较正确的姿势是采用redisson这个客户端工具.具体介绍可以搜索最大的同性交友网站github. 三、如何回答 首先如果你之前用Redis的分布式锁...

mifffy_java的博客 2891
上一篇: MySQL全面优化,速度飞起来
下一篇: 亿级数据毫秒级查询,ElasticSearch是怎么做到的?
JavaShark
博客等级 码龄4年 184粉丝 438原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值