常见的缓存回收策略

Posted 沛沛老爹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见的缓存回收策略相关的知识,希望对你有一定的参考价值。

1.基于空间

基于空间指缓存设置了存储空间,如设置为50MB,当达到存储空间上限时,按照一定的策略移除数据。

2.基于容(数)量

基于容量指缓存设置了最大大小,当缓存的条目超过最大大小时,按照一定的策略移除旧数据。

3.基于时间

TTL(Time To Live ): 存活期,即缓存数据从创建开始直到到期的一个时间段(不管在这个时间段内有没有被访问,缓存数据都将过期)。

TTI(Time To Idle): 空闲期,即缓存数据多久没被访问后移除缓存的时间。

4.基于Java对象引用

软引用 :如果一个对象是软引用,那么当JVM堆内存不足时,垃圾回收器可以回收这些对象。软引用适合用来做缓存,从而当JVM堆内存不足时,可以回收这些对象腾出一些空间供强引用对象使用,从而避免OOM。

弱引用 :当垃圾回收器回收内存时,如果发现弱引用,则将它立即回收。相对于软引用,弱引用有更短的生命周期。

注意: 只有在没有其他强引用对象引用弱引用/软引用对象时,垃圾回收时才回收该引用。即如果有一个对象(不是弱引用/软引用对象)引用了弱引用/软引用对象,那么垃圾回收时不会回收该弱引用/软引用对象。

5.回收算法

使用基于空间和基于容量的缓存会使用一定的策略移除旧数据,常见的如下。

FIFO(First In First Out): 先进先出算法,即先放入缓存的先被移除。

LRU(Least Recently Used): 最近最少使用算法,使用时间距离现在最久的那个被移除。

LFU(Least Frequently Used): 最不常用算法,一定时间段内使用次数(频率)最少的那个被移除。

实际应用中基于LRU的缓存居多,如Guava Cache、Ehcache支持LRU。

以上是关于常见的缓存回收策略的主要内容,如果未能解决你的问题,请参考以下文章

聊聊缓存回收策略跟缓存更新策略

具有LRU回收策略的Java缓存

性能优化--缓存的回收策略优化思路雪崩

架构设计 | 缓存管理模式,监控和内存回收策略

架构设计 | 缓存管理模式,监控和内存回收策略

架构设计 | 缓存管理模式,监控和内存回收策略