1、定时删除:
一旦键过期就立即从内存中删除,节省内存空间,但删除过程会占用大量CPU时间,可能影响服务器的响应时间和吞吐量。
2、惰性删除:
并不会立即从内存中删除过期键,而是在需要访问时才会检查是否过期。这样对CPU友好,但可能导致内存泄漏,因为即使键过期也不会被删除。
3、定期删除:
定期对一些键进行检查和删除,可以有效释放过期键占用的内存。虽然可以限制删除操作执行的时长和频率,降低对CPU的影响,但难以确定删除操作执行的时长和频率,执行过于频繁或较少都可能带来问题。
Redis默认使用的策略
Redis 默认使用的是惰性删除策略和定期删除混合使用。这意味着当客户端尝试读取一个键时,Redis 会先检查该键是否过期,如果过期则会立即删除。这种策略保证了过期键在被访问时能够及时被清理,但也会带来一定的性能开销,因为每次读取键时都需要进行过期检查。
所以,Redis 还会周期性地(默认每秒钟检查 10 次)在后台进行定期删除(Eviction)。定期删除主要用于处理那些没有被惰性删除的过期键。定期删除会检查一部分设置了过期时间的键,然后删除其中已经过期的键。
ps:以下是我整理的java面试资料,密码是obht,感兴趣的可以看看。最后,创作不易,觉得写得不错的可以点点关注!
链接:https://www.yuque.com/u39298356/uu4hxh?# 《Java面试宝典》