发布信息

散布式锁如何智能续期 面试官问 Redis (分布式锁释放)

     2024-10-22 21:00:55     645

本文目录导航:

面试官问:Redis 散布式锁如何智能续期?

资深面试官:你们名目中的散布式锁是如何成功的?老任:咱们经常使用Redis的set命令,这个命令有nx和ex选项。

资深面试官:假设锁到期了,业务还没完结,如何启动智能续期呢?老任:这个......面试官,您刚才问的是什么疑问来着?资深面试官:你们名目中散布式锁是如何成功的。

老任:咱们间接经常使用了Redisson中提供的散布式锁。

资深面试官:你给我进来!!!Redisson的看门狗机制在经常使用Redis散布式锁时,为了防止意外状况下锁无法反常监禁,咱们理论会为锁设置一个超时期间。

但这也带来一个疑问:假设设置了超时期间,而业务逻辑在规则期间内还没口头完,锁就会被监禁,这或者会惹起新的疑问。

因此,Redisson提供了监控锁的看门狗机制。

在锁封锁前,看门狗会始终延伸锁的超时期间。

自动状况下,看门狗的锁超时期间lockWatchdogTimeout是30秒,这个值是可以设置的。

源码解析如今让咱们进入tryLock()方法,检查一下成功源码。

在该方法中调用tryAcquire()方法。

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

tryAcquireAsync()方法中,假设leaseTime小于等于0,调用scheduleExpirationRenewal方法启动续期。

从该方法中看到,leaseTime示意锁的超时期间。

假设调用tryLock方法加锁时设置了该参数,看门狗机制就不会失效。

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

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

renewExpirationAsync的方法内容如下,外面定义了lua脚本,假设key存在,口头pexpire命令启动续期操作。

以上就是Redis散布式锁到期后,业务还没完结时的智能续期处置打算,如今你明白了么?

面试中问到Redis耐久化的原理,本篇在做具体解答

咱们知道redis是一个高效的散布式内存数据库 ,由于是操作内存所以性能十分之快,理论用它来做散布式缓存,用来提高微服务的高性能,然而由于是内存操作,所以当出现主机缺点,断电等状况就会形成内存数据失落 ,无法复原,因此redis 引入了耐久化机制来将内存数据写入磁盘,从而保证了Redis的数据不被失落。

Redis有两种耐久化的模式,一种是RDB,另外种是AOF。

RDB是将Redis内存中数据的快照存储在磁盘内,是Redis的自动耐久化打算。

RDB耐久化自动有三种战略

可在中性能,会以一段期间内到达指定修正的次数为规则来触发快照操作,快照文件名为。

每当Redis服务重启的时刻都会从该文件中把数据加载到内存中。

在60秒内有次操作即触发RDB耐久化。

没有满足第一种条件时,在900秒内有1次操作即触发RDB耐久化。

没有满足第二种条件时,在300秒内有10次操作即触发RDB耐久化。

RDB耐久化除了可以依据性能中的战略来触发外,还可以经常使用save和bgsave命令手动来触发。

这两个命令的区别在于save会阻塞主机进程。

在口头save命令的环节中,主机不能处置任何恳求,然而bgsave(background save,后盾保留)命令会经过一个子进程在后盾处置数据RDB耐久化。 Redis

实质上save和bgsave调用的都是rdbSave函数,所以Redis不准许save和bgsave命令同时口头,当然这也是为了防止RDB文件数据出现不分歧性的疑问。

每次都是一个大文件,备份写入IO操作笔记大,很容易耗时,影响进程资源经常使用。

假设最近一次性进程解体,那么最近一次性数据备份后的数据就被失落。

文件间接就可以当冷备经常使用

AOF(Append only File)以独立日志的模式记载每次的写命令,可以很好地处置了数据耐久化的实时性。

系统重启时可以从新口头AOF文件中的命令来复原数据。

AOF会先把命令追加在AOF缓冲区,而后依据对应战略写入硬盘。

AOF的成功流程有三个步骤

步骤一

把命令追加到AOF缓冲区,

步骤二

将缓冲区的内容写入程序缓冲区

步骤三

将程序缓冲区的内容写入文件

当AOF耐久化性能处于开启形态时,主机每口头完一个命令就会将命令以协定格局追加写入redisServer结构体的aof_buf缓冲区。

而在服务重启的时刻会把AOF文件加载到缓冲区中。

AOF有 三种触发机制

·always:每次出现数据变卦都会被立刻记载到磁盘,性能较差,但数据完整性比拟好。

·everysec:每秒钟将aof_buf缓冲区的内容写入AOF文件,假设宕机,就会有1秒内的数据失落。

·no:将数据同步操作交给操作系统来处置,性能最好,然而数据牢靠性最差。

在性能文件中设置appendonly=yes后,若没有指定apendfsync,自动会经常使用everysec选项。

写入指令随着期间的推移,记载了很多重复的指令,造成数据量十分大。

RDB优先级高于AOF

RDB小,AOF较大

RDB慢,AOF快

RDB快,AOF慢

面试官:redis内存数据满了,会宕机吗?

面试官问:Redis内存数据满了,会宕机吗?面试题惹起心坎吐槽:面试官的疑问仿佛指向了行为了解与设计逻辑,却缺乏明白焦点。

Redis行为无非两种:拒绝新写入或智能转储。

内存满则宕机设计,体如今行了解。

内存数据满存在歧义,设置下限则行为限于拒绝或转储。

设计被动宕机,软件缺点显而易见。

内存溢出,反常程序员在调配内存前会审核可用性,不会设计引发宕机机制。

面试题引人疑心,不只无法探知用意,更或者质疑面试者的专业常识与软件设计逻辑。

从另一个角度,面试官或者想了解面试者能否相熟Redis。

经常使用Redis前应评价内存容量、增量速度,确保适合实例与性能。

监控与预警系统应与内存满状况挂钩,及时复原业务与追责责任人。

自身评价无余,或者标明不称职,但专业疑问应有更片面与深化的讨论。

相关内容 查看全部