Redis的过期键删除策略

一,过期删除策略

  redis数据库键的过期时间都保存在过期字典中,根据系统时间和存活时间判断是否过期。

  redis有三种不同的删除策略:

  1,定时删除:实现方式,创建定时器

  2,惰性删除:每次获取键时,检查是否过期

  3,定期删除:每隔一段时间,对数据库进行一次检查,删除过期键,由算法决定删除多少过期键和检查多少数据库

二,优缺点

  1,定时删除,对内存友好,但是对cpu很不友好

  2,惰性删除,对cpu友好,对内存很不友好

  3,定期删除,是两种折中,但是,如果删除太频繁,将退化为定时删除,如果删除次数太少,将退化为惰性删除。

三,算法

  1,惰性删除

    策略由expireIfNeeded函数实现,所有读写命令在执行之前都会调用该函数进行检查,键写入和获取过程如图所示:

    

    

  2,定时删除

    删除策略由activeExpireCycle算法决定

    关键点,遍历数据库,如果时间到,则终止;遍历数据库接着上次的进度,直到所有数据库遍历完,再接着遍历;遍历库时候,随机取出一定数量的随机键

四,RDB和AOF时过期键的处理

  1,RDB生成时,过期键会被过滤

    RDB载入时,以主服务器运行,则过滤过期键

          以从服务器运行,则忽略过期键,不做处理

  2,AOF生成时,如果过期键还没被删除,则忽略,当被删除以后,会追加记录一条DEL命令

    AOF载入时,过期键会被过滤

    

 

 

 

 

 

  

posted @ 2019-03-06 12:47  superChong  阅读(5735)  评论(0编辑  收藏  举报