三种缓存淘汰算法(LFU、LRU、FIFO)

三种缓存淘汰算法(LFU、LRU、FIFO)

一、FIFO是简单的队列,先进先出。
二、LRU是最近最少使用,优先移除最久未使用的数据。是时间维度。
三、LFU是最近最不经常使用,优先移除访问次数最少的数据。是统计维度。

先进先出算法FIFO

FIFO是英文First In First Out 先进先出,若是缓存容量满,则优先移出最先加入缓存的数据;其内部可使用队列实现。

最少使用LRU

其核心思想是“若是数据最近被访问过,那么未来被访问的概率也更高”。
最多见的实现是使用一个链表保存缓存数据算法

咱们维护一个有序单链表,越靠近链表尾部的结点是越早以前访问的。
当有一个新的数据被访问时,咱们从链表头开始顺序遍历链表。缓存

  1. 若是此数据以前已经被缓存在链表中了,咱们遍历获得这个数据对应的结点,并将其从原来的位置删除,而后再插入到链表的头部。
  1. 若是此数据没有在缓存链表中,又能够分为两种状况:
1.若是此时缓存未满,则将此结点直接插入到链表的头部;
2.若是此时缓存已满,则链表尾结点删除,将新的数据结点插入链表的头部。

最不经常使用LFU

最近最不经常使用,当缓存容量满时,移除访问次数最少的元素,若是访问次数相同的元素有多个,则移除最久访问的那个。队列

使用一个计数器来记录key被访问的频率。经过使用LFU缓存算法,最低访问数的条目首先被移除。遍历

这个方法并不常常使用,由于老数据,有可能访问的次数最多,而新数据次数少,这样每次都会把最近的数据清掉,留下老数据,并且有可能老数据最近又不常使用到。