缓存淘汰算法 FIFO,LFU,LRU

缓存淘汰算法 FIFO,LFU,LRU

FIFO,LFU,LRU 是常见的缓存淘汰算法,又称页面置换算法。

FIFO

FIFO 全称 First In, First Out,即先进先出,符合队列特性,数据结构上使用队列 Queue 实现。

  1. 新访问的数据插入队列尾部
  2. 淘汰队列头部数据

LFU

LFU 全称 Least Frequently Used,基于数据访问频率(次数),数据结构上使用队列 Queue 实现。

核心思想:如果一个数据在最近一段时间内访问次数很少,则在将来一段时间内被访问的可能性也很小。

缓存的每个数据都有引用计数,所有数据按照引用计数排序,具有相同引用计数的数据按照时间排序。

  1. 新访问的数据插入队列尾部,引用计数为 1
  2. 缓存中的数据每次被访问(缓存命中)时,引用计数都会加 1,然后队列根据引用计数重新排列,引用计数越大的数据越靠近队列头部,具有相同引用计数的数据按照时间排序
  3. 淘汰队列尾部数据

LRU

LRU 全称 Least Recently Used,基于数据访问历史记录,数据结构上使用链表 LinkedList 实现。

核心思想:如果一个数据在最近一段时间内没被访问,则在将来一段时间内被访问的可能性也很小。

  1. 新访问的数据插入链表头部
  2. 缓存中的数据每次被访问(缓存命中)时都会被移动到链表头部
  3. 淘汰链表尾部数据

LFU 和 LRU 对比

  • LFU 效率优于 LRU,能够避免周期性或偶发性操作导致缓存命中率下降的问题
  • LFU 需要维护一个队列记录所有数据的访问记录,每个数据都要维护引用计数,内存消耗和性能消耗都较高
  • LFU 实现比 LRU 复杂

猜你喜欢

转载自my.oschina.net/u/3190679/blog/2208812