=================
== Time Stream ==
=================
一个小学生

Redis过期键的删除策略

redis

Redis过期时间保存在过期字典中,键的过期策略有三种:定时删除、惰性删除、定期删除。Redis采用了惰性删除和定期删除两种策略配合。

过期键删除策略

  • 定时删除,设置过期键同时设置一个定时器,可保证过期键尽快删除,内存友好,CPU不友好,占用CPU。主动删除策略。
  • 惰性删除,每次从键空间获取键时,如果过期就删除,没过期就返回该键,CPU友好,内存不友好,不能及时删除过期键。被动删除策略。
  • 定期删除,每隔一段时间检查一次,删除过期键。主动删除策略。

Redis过期键删除策略

Redis使用惰性删除和定期删除配合,在CPU时间和内存之间取得平衡。

  1. 在访问key的时候判断key是否过期。
  2. 在定期的serverCorn任务中,逐出部分过期key。默认在CPU空闲时每秒执行10次。

RDB功能对过期键的处理

  • 生成RDB文件,使用SAVE或者BGSAVE新建RDB文件时,会对键检查,过期的键不会保存到RDB中。
  • 载入RDB文件,主服务器载入RDB文件,过期键会被忽略。
  • 载入RDB文件,从服务载入RDB文件,不会检查过期键,全部载入数据库中。主从服务器同步的时候,从服务器数据库会被清空。

AOF功能对过期键的处理

  • 服务器AOF持久化模式运行时,如果键过期,还没被惰性删除或定期删除,AOF文件不会做处理。
  • 当键被惰性删除或定期删除,程序会向AOF文件追加一条DEL命令,显式记录删除该键。
  • AOF重写时,会对键校验,已过期的键不会保存到重写后的AOF文件中。

复制功能对过期键的处理

  • 从服务器的过期键删除动作由主服务器控制。
  • 主服务器删除一个过期键后,会显式向所有从服务器发送一个DEL命令,告知删除过期键。
  • 从服务器执行客户端发送的读命令时,碰到过期键也不会删除。
  • 从服务器只有在接收到主服务器发来的DEL命令才会删除过期键。

参考

  • 《redis设计与实现》(第二版)