数据库由两个字典构成:
- dict:保存键值对
- expires:保存过期时间
1. 数据库过期键的删除
1.1 删除策略
针对过期的键主要有3种处理策略
Redis综合使用惰性删除和定期删除两种策略:
惰性删除:所有读写命令执行前调用expireIfNeeded函数检查输入键是否过期,过期就删除(类似一个过滤器,避免命令接触到过期键)
定期删除:在规定时间内,分多次遍历数据库
1.2 RDB对过期键的处理
- 过期键不会保存到新的RDB文件中
- 主服务器载入RDB文件忽略过期键
- 从服务器都会载入(但是主从同步时,从服务器数据清空,因此过期键不会有什么影响)
1.3 AOF对过期键的处理
- 向AOF文件追加DEL命令,显式记录该键已删除。
- AOF重写不会保存已过期的键。
1.4 复制模式下过期键的处理
- 从服务器的删除动作由主服务器控制
- 主服务器删除一个键之后会向所有从服务器发送一个DEL命令
- 在未收到主服务器的命令时,从服务器意识不到过期键,而是像正常键一样处理,收到DEL命令才删除。
这种统一的、中心化的过期键删除策略可以保证主从一致性