Redis过时key的清除策略

Redis如何淘汰过时的keys: set name wx 3600算法

惰性删除数据库

概念:当一些客户端尝试访问它时,key会被发现并主动的过时

听任键过时无论,可是每次从键空间中获取键时,都检查取得的键是否过时,若是过时的话,就删除该键

特色:CPU友好,但若是一个key再也不使用,那么它会一直存在于内存中,形成浪费

定时删除服务器

概念:设置键的过时时间的同时,建立一个定时器(timer),让定时器在键的过时时间来临时,当即执行对键的删除操做

按期删除函数

隔一段时间,程序就对数据库进行一次检查,删除里面的过时键,至于要删除多少过时键,

以及要检查多少个数据库,则由算法决定。 即设置一个定时任务,好比10分钟删除一次过时的key;间隔小则占用CPU,间隔大则浪费内存

例如Redis每秒处理:

1. 测试随机的20个keys进行相关过时检测。
2. 删除全部已通过期的keys。
3. 若是有多于25%的keys过时,重复步奏1.

Redis服务器实际使用的是惰性删除和按期删除两种策略:经过配合使用这两种删除策略,服务器能够很好地在合理使用CPU时间和避免浪费内存空间之间取得平衡。测试

惰性删除策略是怎么实现?经过expireIfNeeded函数,当咱们操做key的时候进行判断key是否过时code

按期删除策略是怎么实现的?经过activeExpireCycle函数,serverCron函数执行时,activeExpireCycle函数就会被调用,规定的时间里面分屡次遍历服务器的expires字典随机检查一部分key的过时时间,并删除其中的过时keyserver

相关文章
相关标签/搜索