什么是LRU缓存淘汰机制

LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。

LRU正如我们日常生活时使用手机那样子:我们会打开多个应用,在后台应用管理可以看到你打开的应用列表,最近的开的排的靠前,比较旧的没用就靠的比较后了。可是,要知道,我们的手机内存是有限的,如果开太多应用,把内存都占满,那么手机就特别卡了。所以,在这时候,手机会自动清理内存,过程如下:会将最久未使用的应用程序进程停止(判定为无用的数据),就是按照时间来,然后停掉倒数第二久未使用的应用......以此类推,直到有足够空间才停止清理。如果你又去访问未停止的应用,那么他就跳到了我们后台应用列表的第一个了。

LRU算法就是这样的,将最久、最少使用的数据进行淘汰。

如果叫我们设计一个LRU算法如何设计呢?

要接受一个最大的缓存容量 capacity

实现两个方法:

get(int key):获取key对应的val

put(int key, int value):存入新的键值对,如果存在的话就更新val

注意:不管是访问,还是添加 已存在 / 不存在 键值对,那么就说明访问了该数据

使用双向链表和哈希表的结合实现LRU算法: 哈希表的查找速度快,但是是无序的; 而链表是有序的, 但是查找速度慢, 为\(O(N)\), 所以我们可以利用这两个特性,结合起来,形成了哈希链表, 这样的话,get和put都是\(O(1)\)的时间复杂度了, 图解如下:

什么是LRU缓存淘汰机制

这对应力扣上面的142题,大家可以去练习一下,相信你写过一遍就会明白其中原理了...

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjjxs.html