Redis过期数据删除策略解析:定期删除与懒惰删除区别

创始人
2025-04-01 12:13:30
0 次浏览
0 评论

Redis 的数据过期了就会马上删除么?

MA兄弟,当钥匙到达到期时间时,Redis会立即被删除吗?让我们首先讨论结论,并且不会立即删除。
Redis有两种删除过期数据的策略:定期选择一些数据以删除;懒惰的删除;此命令在REDIS 2 .4 版本中,出口时间不是很准确,它可以介于零到一秒之间。
从Redis 2 .6 起,出口误差为0到1 毫秒。
evereconds [nx | xx | GT | LT]指令可以指示指定密钥的出口时间。
如果未指定到期时间,除非我们明确删除它,否则键将始终存在,例如执行零件指令。
So称为“狡猾的兔子死亡,一只狗煮沸”,如果它没有用,则杀死它,与3 5 岁时的“毕业”相同。
非常恐慌...从雷迪(Redi)的7 .0.0:从雷迪(Redi)的7 .0.0:到期的版本中,添加了添加的选项:nx,xx,xx和gt,lt,lt,lt,lt options。
NX:指定键未过期的出口时间; XX:仅在键过期时指定出口时间; GT:仅当新出口时间大于当前出口时间时,才能指定到期时间; LT:仅当新出口时间小于当前出口时间时,才能指定到期时间。
在过期和持久的主奴隶或集群体系结构中,这两台机器的铃铛严重不足。
有问题吗?最重要的到期信息由UNIX绝对时间戳表示。
为了使过期的操作正常运行,机器之间的时间必须稳定且同步,否则出口时间将不准确。
例如,如果两台与RDB传输严重同步的机器,则将从将来设置为2 000秒。
如果主机中的密钥设置为1 000秒以生存,当从从加载RDB时,钥匙会认为钥匙会到期(因为从将来设置为2 000年代),并且不会等到1 000年代到期。
懒惰的删除懒惰删除非常简单。
当客户要求询问密钥时,您可以检查键是否过期。
如果到期,请删除密钥。
例如,当Redis接收客户的GetMovie:Ozawa#ma ... liya.rmvb -request时,它将首先检查键=电影:Ozawa#ma ... liya.rmvb已过期,如果它过期,它将被删除。
删除过期数据的主动性将移交给每个访问请求。
该实现是通过过期函数实现的,源编码路径是:SRC/DB.C。
intexpireifneed(redisdb*db,robj*键,intforce_delete_expired){//键尚未过时,return0if(!keyisexpired(db,dec,deb,key)return let_expired 1 ;} if(checker()不能让这些数据“占据坑”,而不是垃圾,这意味着每次删除每1 秒钟,每次运行一次(每次1 00毫秒)特定的步骤如下:从所有钥匙集中选择2 0个键;这意味着,任何时间的最大键数等于每秒的最大写作操作数量除以4 为什么不检查所有指示有效期时间的键呢?考虑一下,假设Redis存储1 00W键,所有设置了出口时间并每1 00ms检查1 00W键,并且CPU浪费了通过检查插座键,将禁用REDIS。
注意:是定时删除还是懒惰的删除。
删除数据后,主将生成已删除的指令将其注册到AOF和从属结中。
MA兄弟,如果插座数据太多并且及时删除无法完全删除(每次删除后过期的密钥仍超过2 5 %)会发生什么,而这些密钥将不再被客户询问,这意味着它们不能删除懒惰,会发生什么?它会导致redis用完记忆以及如何打破它吗?这个问题很好,答案是使用纪念机制。
今天就在这里,如果您可能想窒息大量的知识,我说的太多了,挽救您的生命很重要。
当涉及纪念机制的细节时,您可以看到下一个退化。
原始参考文本:https://juejin.cn/post/7 09 8 2 5 6 1 9 07 3 9 5 7 8 9 1 1

Redis-数据过期清除策略+缓存淘汰策略

使用REDIS时,重要的是要设置高速缓存大小并考虑数据到期间隙和缓存褪色策略。
REDIS缓存的空间大小可以通过ConfigsetMaxMemory4 GB命令设置。
输入缓存后,您需要决定如何清除数据。
数据到期清除策略有两种类型:定期删除和懒惰删除。
通过常规的删除策略,Redis每1 00ms每1 00ms随机检查到期密钥,以查看是否到期并删除它。
此方法避免了CPU使用问题,并避免了较高的定时删除,但是您需要意识到并发环境中对CPU的影响。
懒惰的删除检查是否到期并在获取密钥时被删除,但是由于不会及时清洁过期的密钥,因此可能会导致内存堆积。
消除缓存策略提供了各种重新选择,包括挥发性TTL,挥发性随机,挥发性LRU,挥发性LFU,Allkeys-Mandom,Allkeys-Lru,Allkeys-lru,Allkeys-lru,Allkeys-lfu,Allkeys-lfu等。
其中,我们建议首先使用“ Allkeys-LRU”策略。
建议利用LRU算法来保留最常访问的数据并提高应用程序性能。
“ Allkeys-lru”适用于明显区分热数据的场景,但是如果没有明显的区别,则“ Allkeys-random”无效。
对于没有到期日期的钥匙值对,排除策略的行为类似于“ noeviction”,并且未执行数据排除。

redis中过期监听如何得到即将过期key对应的值?

REDIS确定每个键的到期时间自动删除到期密钥,减少内存消耗并满足特定业务场景的需求,例如独特符号的真实性以登录用户。
要设置到期时间,您可以将STEEX用于链的类型,或用于其他类型的到期命令。
默认情况下,Redis检查过期的键并执行删除,但数据可能不会及时删除。
为了减少中央处理单元的压力,采用了缓慢的删除策略,即在获得钥匙时进行过期检查,并将其删除过期。
但是,这可能会使一些过期的键未删除。
实际上,Redis采用了删除 +删除策略。
提供了消除内存机制以改善内存使用。
LRU的策略优先删除最长的未使用数据,确保记忆中的数据是热数据,从而提高了缓存速率。
双向与串联菜单与哈希姆普相结合以实现LRU算法,并通过重写removeldStentry方法在LinkedHashMap中实现。
LFU策略着重于消除最低的访问频率数据。
当使用内存超过设定阈值时,REDIS会实现数据破坏策略,并且有六个特定的策略可供选择。
为了提高缓存速率,您可以将最大程度地使用存储器设置为使用热点数据,并启用Allkeys-Lru的策略,以摆脱最不最近使用的数据。
自REDIS 4 .0以来,已经提出了波动的LFU和Allkeys-LFU策略,以通过访问频率统计数据清除数据。

Redis——key 过期与淘汰

到期机制和REDIS的处置如下:到期机制:设置到期时间:您可以使用相关订单为密钥设置到期时间,或在准备链时直接添加到期时间的选项。
查询时间到期时间:使用TTL订单查询密钥剩余有效性的时间。
如果结果为1 ,则意味着密钥未指定到期时间。
取消到期:使用持续时间取消键的键的时间。
即将卸下的词典记录:将密钥调整为其有效性的到期时,REDIS到期词典将记录这些过期键的信息以进行后续判决。
策略删除:REDIS采用了“缓慢删除 +正常删除”的策略。
到达或修改后,如果其有效性结束,它将被删除。
此外,REDIS会定期发现过期的键,默认情况下为每秒1 0次,然后将样品随机检查以检查每个回合。
如果发现了超过5 个过期的密钥,请继续删除它们,直到末端的数量为2 或更少。
司法机制:消除内存策略:当重新运行记忆超过最大特定内存时,应使用内存删除策略来确保有效的操作。
非分散策略:没有数据删除策略意味着在内存已满并且没有消除现有数据时仅编写新数据。
司法策略类型:根据实际需求,Redis提供了各种司法策略,包括在指定有效性的到期时间内取消,或消除所有数据库。
重新布置的LRU算法:REDIS正在实现近似LRU的算法来保存内存。
通过将其他字段添加到对象的结构中以记录到达的时间,它比最近使用的最少数据更可取。
这种实现方法与传统LRU的LRU列表的应用不同。
LFU算法:基于访问数据的频率消除。
尽管LFU算法包括有关到达次数的注册信息,但REDIS的实现并不能完全实现传统的LRUS精度。
底线,到期机制和消除REDIS保证了数据操作的时机和稳定性。
通过合理地使用这些功能,可以有效提高数据库的效率和性能。
热门文章
1
高效掌握:CMD命令轻松启动、关闭及登录... 如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...

2
MySQL分区删除技巧与8.0版本新特性... mysql删除分区在MySQL中,删除分区操作主要使用“可替代”的命令与“ dr...

3
Python代码实现:如何判断三角形的三... python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...

4
深度解析:MySQL查询语句执行顺序及优... mysql查询语句执行顺序当这是由于执行SQL的过程时,了解其过程很重要。 ...

5
SQL教程:使用SUBSTRING和IN... sql取特定字符的前面几位字符selectsubstr('L-0FCLDRBCT...

6
MySQL日期差异计算方法:轻松获取日期... MySQL计算时间差两日期相减得月份mysql两时间相减得月MySQL计算时间之...

7
MySQL及SQL查询获取前10条数据方... MySql查询前10条数据sql语句是从MySQL获取前1 0个数据的SQL查询...

8
MySQL启动问题排查与解决指南 Mysql为什么启动不了如果要配置MySQL,则遇到无法启动的问题,可能是由于配...

9
DbVisualizer添加MySQL数... 如何在DbVisualizer中添加本地mysql数据库由于DbVisualiz...

10
SQL字段默认值设置全攻略:轻松实现自动... sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...