大家好,我正在编码。最近,我在2022年在Redis中解决了最新的采访问题。
REDIS到期键的删除策略?概率:★★★★
REDIS过期密钥的删除策略是:定期删除+惰性删除。
1)关于常规删除,REDIS默认情况下每100毫秒每100ms随机选择一些过期的密钥,以检查其是否过期,并在过期时将其删除。
但是,假设将100W键放入Redis中,并设置了到期时间。如果您每百毫秒一次检查100W密钥,那么REDIS基本上被卡住了,CPU负载将很高,并且基本上会消耗它。在检查过期的密钥中。
请注意,每100ms每100ms都会遍历所有到期时间,这是绩效灾难。实际情况是随机选择以每次检查和删除。
但是,由于机会带来了不确定性,因此当没有删除时间时,可能会删除大量过期的密钥。我该怎么办?您需要删除惯性。
关于源代码分析的常规删除:redis.c/servercron函数执行redis服务器的定期操作时,将调用redis.c/activeExpireCycle。activeExpireCycle函数在指定的时间内多次进入服务器中的每个数据库,从数据库的到期字典中随机检查一部分键的到期时间,并删除到期键。
Current_DB记录当前检查-UP数据库。如果函数ActiveExpiRecycle当前正在处理2号数据库,则时间超过限制,返回后,将从第三个数据库中检查下一个检查。检查所有数据库后,检查了所有数据库,将Curren_DB重置为0,然后开始检查一轮检查再次。
2)关于惯性删除,当用户获取某个键时,redis会检查键是否设置到期时间和到期?如果到期,此时将在此时删除,并且不会将任何内容返回给用户。
惰性删除存在问题,取决于用户的活动调用。如果某些用户很长一段时间无法访问,则会导致大量的到期键积累在内存中,这会导致REDIS内存块排气。
答案是:触发REDIS内存消除机制。(将在下面提到)
您可以简单地谈论RETIS记忆消除机制(回收策略)。
1),REDIS消除机制具有以下内容:
2)redis的默认到期策略是无言,是最暴力的。如果记忆已经满,那是一个“华丽”的故事。还有什么?
3)redis.conf中过期的消除配置如下: