LRU算法——缓存算法

LRU(最近最久未用算法)

LRU算法主要用于缓存算法,在节省资源的情况下提高数据访问效率
筛选热点数据:对不断访问的数据进行筛选淘汰,剩下的数据就为热点数据;相对而言,释放最近未被访问数据占用的空间也是采用LRU算法。

1 LRU的实现——链表

使用一个链表保存缓存数据
(1)新数据插入到链表头部;
(2)每当缓存命中(即缓存数据被访问),则将数据移到链表头部;
(3)当链表满的时候,将链表尾部的数据丢弃。
在这里插入图片描述

链表实现的优缺点:

  • 当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。
  • 命中时需要遍历链表,找到命中的数据块索引,然后需要将数据移到头部。

2 LRU的实现——哈希链表

在这里插入图片描述
当一个位置被命中之后,就将该位置调整到链表头的位置,新加入的数据也直接加到链表头中。这样,在多次进行Cache操作后,最近被命中的,就会被向链表头方向移动,而没有命中的,就向链表后面移动,链表尾则表示最近最少使用的数据。当需要替换内容时候,链表的最后位置就是最少被命中的位置,我们只需要淘汰链表最后的部分即可。

使用哈希链表的好处就是在命中数据时,无序遍历链表。

参考博客:https://blog.csdn.net/leo_weile/article/details/90142697

猜你喜欢

转载自blog.csdn.net/glpghz/article/details/108354625