redis提供了为key设置过期时间,redis定时删除过期key。
定时删除:
实现:在设置键的过期时间的时候创建一个定时器,当过期时间到的时候立马执行删除操作。
优点:可以做到及时删除
缺点:会创建大量的定时器,严重影响性能
惰性删除:
实现原理:Redis收到获取key的指令,首先判断是否过期、若过期则执行删除操作、返回null
优点:只有在获取单个key时候,做过期判断,删除过期的key,对于CPU时间的占用是比较少的,性能较高。无须扫描全库
缺点:key无法做到及时删除,会保存部分无用数据,占用内存
若自定义实现LRU算法,可以借鉴以上惰性删除的思想。
定期删除:
配置定时器,定时扫描全库,检测是否有过期键,有则删除
优点:可以弥补惰性删除的缺点
缺点:key无法做到及时删除,还是会保存部分无用数据,占用内存
Redis采用的过期策略:惰性删除+定期删除