常见过期策略:
1.定时删除(不建议使用)
在一个键设置过期时间的同时为该键创建一个定时器,时间到来的时刻删除该键
优点:内存释放快 ;缺点:大量键的定时器影响性能
2.惰性删除
在对键进程获取或者处理的时候验证是否过期,过期则删除返回null
优点:cpu占用少;缺点:大量未过期未删除的键未删除释放内存可能发生内存溢出
3.定期删除
设定定时器,到时间执行一次删除过期键操作
优点:定期删除cpu占用相对定时删除少很多;缺点,内存方面不如定期删除,cpu占用方面不如惰性删除
难点:设置定期时间,参考逻辑和服务器资源设定
redis 采用的方式是 惰性删除和定期删除的联合方案
惰性删除流程:get或setnx操作时先检查是否过期删除
定期删除流程:获取每个库中的设定过期时间的键 判断是否过期(默认是获取20键验证)
AOF持久化过期键处理
内存持久化到AOF文件时验证键是否过期
AOF文件重写时验证是否过期,过期则删除同时删除文件中的信息
RDB文件恢复到内存中时验证是否过期,过期则删除同时删除文件中的信息