策略有:定时删除策略,惰性删除策略,定期删除策略。
定时删除策略
在设置 key 的过期时间的同时,为该 key 创建一个定时器,让定时器在 key 的过期时间来临时,对 key 进行删除。
优点:保证内存尽快释放。
缺点:若 key 过多,删除这些 key 会占用很多 CPU 时间, 而且每个 key 创建一个定时器,性能影响严重。
惰性删除策略
key 过期的时候不删除,每次从数据库获取 key 的时候去检查是否过期,若过期,则删除,返回 null。
优点:CPU 时间占用比较少。
缺点:若 key 很长时间没有被获取, 将不会被删除,可能造成内存泄露。
定期删除策略
每隔一段时间执行一次删除(在 redis.conf 配置文件设置 hz,1s 刷新的频率)过期 key 操作。
优点:可以控制删除操作的时长和频率,来减少 CPU 时间占用,可以避免惰性删除时候内存泄漏的问题。
缺点:对内存友好方面,不如定时策略;对 CPU 友好方面,不如惰性策略
Redis 一般采用:惰性策略 + 定期策略两个相结合。