首页天道酬勤redis选举算法,redis删除过期key

redis选举算法,redis删除过期key

张世龙 05-05 17:03 59次浏览

我最近在读一本叫《Redis设计与实现》的书。 这本书比较详细地介绍和说明了Redis的实现原理。

Marser组织了Redis过期密钥的一些删除策略。 下面的玛莎带你来强迫你飞走,带你直到天黑。

Redis中过期密钥的删除策略分为定时删除、定期删除、惯性删除三种。

其中,定时删除和定期删除是主动删除策略,惯性删除是被动删除策略。

逐一介绍这三种删除策略的原理及其优缺点。

1、定时删除

删除计时器是指在设置key过期时间的同时创建计时器。 计时器在key过期时立即执行key删除操作。

此删除策略将尽快删除过期的密钥,并释放过期的密钥占用的内存。

但是,该战略对CPU时间最不友好。 如果过期密钥较多,则删除过期密钥的行为可能会占用相当大的CPU时间;如果内存不紧张但CPU时间非常紧张,则使用CPU时间删除与当前任务无关的过期密钥会影响服务器的响应时间和吞吐量

例如,如果有大量命令请求正在等待服务器处理,且服务器当前没有足够的内存,则服务器应该优先使用CPU时间来处理客户端的命令请求,而不是删除过期的密钥。

此外,虽然要创建计时器,必须在Redis服务器上使用时间事件,但当前时间事件是使用无序链表实现的,查找事件的时间复杂性为o(n ),可以有效处理大量时间事件让服务器创建大量的计时器来实现定时删除,在现阶段是不现实的。

2、定期删除

定期删除每隔一定时间,程序检查Redis数据,删除中的过期密钥。 至于要删除多少过期密钥以及要检查多少数据库,Redis内部算法尚未确定并进行考证。 如果盆友知道的话,请通知我。 谢谢~

在Redis内部,每隔一段时间执行删除过期密钥的操作,并限制删除操作的执行时间和频率,从而减少删除操作对CPU时间的影响。 但是,必须合理设置删除操作的执行时间和频率。 否则,有可能发展为定时删除或惯性删除。

定期删除策略可以有效减少过期密钥导致的内存浪费。

3、惰性删除

惯性删除是定时删除和定期删除的折中处理方案。 这将key的有效期置之不理,但每次获取key时,都会检查获取的key是否过期,如果过期,则删除该key; 如果过期未过期,则返回该密钥的值。

此策略最适合CPU时间,并且只有在key已检出时才会进行key过期检查。 也就是说,仅在不可能的情况下进行,删除的对象仅限于当前处理的密钥,删除其他无关的过期密钥不会花费CPU时间。

此策略的缺点是对内存最不友好。 如果一个key已过期,且该key仍留在数据库中,则除非删除该过期key,否则不会释放正在使用的内存。 例如,如果数据库中有非常多的过期密钥,且这些过期密钥未被访问,则它们可能永远不会被删除,除非用户手动运行flushdb命令将其清空。 结果,大量无用的脏数据会消耗大量的内存。

Redis过期的密钥实际上既用于定期删除策略,也用于非活动删除策略,使服务器在合理使用CPU时间和不浪费内存空间之间取得了良好的平衡。

redis清理策略,redis 内存淘汰策略