从LIFO到LFU,8种缓存淘汰策略,一张图搞懂!

从LIFO到LFU,8种缓存淘汰策略,一张图搞懂!_第1张图片

LRU (Least Recently Used) - 最近最少使用

LRU策略会淘汰最近最少使用的缓存项,也就是说,最久没有被访问到的数据会被首先删除。

例子:假设缓存中有5个数据项,它们的最近访问时间分别为4分钟、14小时、2小时、6分钟和5秒。按照LRU策略,14小时之前被访问的那个数据项会被优先淘汰,因为它是最久没有被访问的。

MRU (Most Recently Used) - 最近最多使用

MRU这个策略恰好与LRU相反,会淘汰最近使用的缓存项。这种策略通常用于某些特殊的缓存需求,比如数据库查询缓存。

例子:同样有5个数据项,最近访问时间分别为4分钟、14小时、2小时、6分钟和5秒。按照MRU策略,5秒之前被访问的数据会被优先淘汰,因为它是最近使用过的。

SLRU (Segmented Least Recently Used) - 分段式最近最少使用

SLRU策略将缓存分为两个部分:probation segment和protected segment。

新进入缓存的数据项首先进入probation segment,只有当再次被访问时才会被移到protected segment。LRU淘汰策略在probation segment进行。

例子:一个数据项第一次被访问时进入probation segment,如果再次访问则提升到protected segment。在probation segment内,最近最少使用的数据将会被淘汰。

LFU (Least Frequently Used) - 最不经常使用

LFU 这个策略淘汰使用频率最低的缓存项。也就是说,数据被使用的次数越少,越有可能被删除。

例子:5个数据项分别被访问了209次、541次、2次、11次和78次。按照LFU策略,访问次数为2次的数据项会被优先淘汰,因为它的使用频率最低。

FIFO (First In First Out) - 先进先出
  1. FIFO (First In First Out) - 先进先出
    FIFO这个策略按照进入缓存的顺序进行淘汰,最早进入的缓存项最先被删除。

例子:如果缓存中的数据项是按照以下顺序加入:数据1、数据2、数据3、数据4、数据5,那么数据1将会是第一个被淘汰的,因为它是第一个加入缓存的。

TTL (Time-to-Live) - 生存时间

每个缓存项都有一个设定的生存时间(TTL)。当时间到期,缓存项将被标记为过期并被淘汰。

例子:一个数据项的TTL设定为5s钟,在这5s钟内它可以被缓存。一旦时间超过5s钟,这个数据项就会被清除出缓存。

Two-Tiered Caching - 两级缓存

Two-Tiered Caching将缓存分为两个级别:一个用于存储经常使用的数据,另一个用于存储不经常使用的数据。优先从较快的缓存层中读取数据。

例子:常见于CPU缓存系统,L1缓存存放经常使用的数据,而L2缓存用于较不频繁的数据。L1缓存命中失败时,会查询L2缓存。

RR (Random Replacement) - 随机替换

这个策略随机选择一个缓存项进行淘汰,适用于需要简单实现和低开销的场景。

例子:当缓存达到最大容量时,随机选择一个数据项(例如第4个数据项)将其删除,无论其访问频率或时间。

你可能感兴趣的:(计算机底层原理,缓存)