FIFO
FIRST IN FIRST OUT 先进先出
每次淘汰最早添加的记录,但是很多记录添加的早,还访问很频繁,这样的话命中率就不高。
LFU
淘汰缓存中使用频率最低的。LFU 认为如果数据过去被访问多次,那么将来被访问的频率也会很高。LFU 的实现需要维护一个按照次数排序的队列,每次访问后元素的访问次数改变,队列重新排序。
LFU 的命中率比较高,但是缺点是维护每个记录的访问次数对内存的消耗比较高,并且如果数据访问模式发生改变,LFU 需要较长的时间去适应,受历史访问的影响较大。在保证高频数据有效性的场景下,可以用这类策略。
LRU
LRU(Least Recently Used 最近最少使用)
LRU 策略会淘汰最近最少使用的缓存数据。它的核心思想是如果数据最近被访问过,那么将来被访问的概率也会更高。
LRU 的实现通常需要一个有序的数据结构(如双向链表或哈希表与链表结合),每次访问数据时将其移动到队尾,淘汰时移除队首的数据。
LRU 的优点是能够较好地适应数据的访问模式变化,命中率较高,且实现复杂度适中。
ARC
ARC(Adaptive Replacement Cache 自适应替换缓存)
ARC 是一种自适应的缓存替换策略,它结合了 LRU 和 LFU 的优点,通过动态调整缓存分配来适应不同的访问模式。ARC 维护两个队列:一个用于最近访问的数据(类似 LRU),另一个用于频繁访问的数据(类似 LFU)。根据访问模式的变化,ARC 会动态调整这两个队列的大小比例,以提高缓存命中率。
ARC 的优点是能够在不同的访问模式下表现出色,无需手动调整参数,适应性强。其缺点是实现较为复杂,可能会增加一定的计算开销。