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

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

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

先进先出算法FIFO

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

最少使用LRU

其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。
最常见的实现是使用一个链表保存缓存数据

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

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

最不常用LFU

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

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

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

你可能感兴趣的:(lrucache,算法,缓存)