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

news/2024/10/18 8:32:20/

资深面试官:你们项目中的分布式锁是怎么实现的?

老任:基于redis的set命令,该命令有nx和ex选项。

资深面试官:那如果锁到期了,业务还没结束,如何进行自动续期呢?

老任:这个......面试官,您上个问题是啥来着?

资深面试官:你们项目中分布式锁是怎么实现的。

老任:我们直接使用了Redisson中提供的分布式锁。

资深面试官:你给我滚!!!

Redisson的看门狗机制

使用redis分布式锁时,为了防止种种异常情况下,锁无法正常“释放”的情况,我们都会为锁设置个超时时间。

这时候,又会存在一个尴尬的情况,如果设置了超时时间,但在规定的时间内,业务逻辑还没有执行完,锁就被释放了......那么针对一些特定的业务逻辑,这可能又会引起新的问题......

所以Redisson就给我们提供了监控锁的看门狗机制,通过该机制,锁被关闭前,看门狗会不断的延长锁的超时时间。默认情况下,看门狗的锁超时时间lockWatchdogTimeout是30s,该值当然也是可以设置的。

源码伺候

现在让我们进入tryLock()方法来查看一下实现源码,在该方法中调用tryAcquire()方法。

tryAcquire()方法中调用tryAcquireAsync()方法。

tryAcquireAsync()方法中,如果leaseTime小于等于0,调用scheduleExpirationRenewal方法进行续期。

从该方法中看到,leaseTime表示锁的超时时间,如果调用tryLock方法加锁时,设置了该参数,看门狗机制不会生效。

scheduleExpirationRenewal()方法中调用了renewExpiration()方法。

renewExpiration()方法中启用了一个timeout定时器,internalLockLeaseTime的1/3时间去执行续期操作,续期的方法是renewExpirationAsync()。

renewExpirationAsync的方法内容如下,里面定义了lua脚本,如果key存在,执行pexpire命令进行续期操作。

protected CompletionStage<Boolean> renewExpirationAsync(long threadId) {return this.evalWriteAsync(this.getRawName(), LongCodec.INSTANCE, RedisCommands.EVAL_BOOLEAN, "if (redis.call('hexists', KEYS[1], ARGV[2]) == 1) then redis.call('pexpire', KEYS[1], ARGV[1]); return 1; end; return 0;", Collections.singletonList(this.getRawName()), this.internalLockLeaseTime, this.getLockName(threadId));
}

以上就是redis分布式锁到期后,业务还没结束时的自动续期解决方案,现在你会了吗?关注Java架构栈,干货天天都不断哦


http://www.ppmy.cn/news/486045.html

相关文章

华硕EX-B360M-V3 i5-9400F GTX 1060 5GB 电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板华硕EX-B360M-V3(B360芯片组) 处理器英特尔 Core i5-9400F 2.90GH 六核已驱动 内存8GB(影驰DDR42133MHz8GB)已驱动 硬盘金士顿SA400S37240G(240…

r5处理器_i5-9400F和R5-2600哪个好?R5 2600和i5 9400F性能对比测试评测

intel在2019年CES展会为广大用户推出了全新F后缀名型号,属于无内置核心显卡版本,主要针对竞争对手锐龙系列处理器,目前首发了九代酷睿i5-9400F,由于无内置核显,价格实惠,性价比十足。那么i5-9400F和R5-2600哪个好?下面装机之家分享一下R5 2600和i5 9400F性能对比测试评测…

3500x架构_7nm架构基因,3500X完胜9400F的法宝

原标题&#xff1a;7nm架构基因&#xff0c;3500X完胜9400F的法宝 游戏玩家都知道&#xff0c;拥有一颗强劲的CPU才能保证游戏帧速足够高、体验足够流畅。随着AMD第三代锐龙处理器上市&#xff0c;AMD锐龙5 3600/3600X凭借出众的综合性能一度横扫2000元以下处理器市场&#xff…

ASUS 华硕 NX580V 飞行堡垒 安装WIN7系统教程

前言&#xff1a; 前段时间换电脑的时候&#xff0c;因为颜值买了580&#xff0c;580可以堪称西装暴徒了&#xff0c;I7 7700HQGTX1050&#xff08;2G&#xff09;的配置虽然不能称得上顶尖&#xff0c;但足以运行各类大型游戏以及视频后期等应用&#xff0c;但是由于Intel第7…

sharemouse pro_出乎意料的高规格 华硕B460重炮手主板评测(全文)_华硕 TUF GAMING B460M-PRO_游戏硬件主板...

今年华硕在主板方面布局了重炮手系列&#xff0c;这是基于中端主板市场推出的新系列产品&#xff0c; 华硕TUF GAMING B460M-PRO重炮手主板就是其中一款新品,拥有强悍811供电模组、疾速网卡、迎接未来的Type-C接口等特点&#xff0c;高规格的用料之外&#xff0c;价格却与一般…

SpringMVC08:拦截器+文件下载

目录 一、概述 二、自定义拦截器 1、新建一个Moudule&#xff0c;SpringMVC-07-Interceptor&#xff0c;添加web支持&#xff1b; 2、配置web.xml和springmvc-servlet.xml文件 3、编写一个拦截器 4、在springmvc的配置文件中配置拦截器 5、编写一个Controller&#xff0…

卖家必看,要做好独立站,一定要知道的八件事!

如何打造并运营你的跨境独立站&#xff1f;如何吸引更多的流量并促使他们在你的网站下单&#xff1f;在你决定开设独立站之前&#xff0c;以下这些方面是你必须要考虑的&#xff0c;否则你的独立站可能会面临失败的风险。 一、定义目标受众 你是B2B业务还是B2C独立站&#xff…

千万不要跟随这 4 种领导!

​ 见字如面&#xff0c;我是军哥&#xff01; 最近有程序员读者问我&#xff0c;什么样的领导不能跟随&#xff1f;都有哪些坑&#xff01;这个我擅长哈&#xff0c;毕竟职场混迹 15 年&#xff5e; 第一种&#xff0c;技术能力不行还喜欢指手画脚的领导。 第二种&#xff0c;…