什么是LRU缓存淘汰机制

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

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

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


若是叫咱们设计一个LRU算法如何设计呢?spa

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

  • 实现两个方法:code

    • get(int key):获取key对应的val
    • put(int key, int value):存入新的键值对,若是存在的话就更新val
    • 注意:无论是访问,仍是添加 已存在 / 不存在 键值对,那么就说明访问了该数据
  • 使用双向链表和哈希表的结合实现LRU算法: 哈希表的查找速度快,可是是无序的; 而链表是有序的, 可是查找速度慢, 为\(O(N)\), 因此咱们能够利用这两个特性,结合起来,造成了哈希链表, 这样的话,get和put都是\(O(1)\)的时间复杂度了, 图解以下:htm

这对应力扣上面的142题以及个人题解,你们能够去练习一下,相信你写过一遍就会明白其中原理了...blog

相关文章
相关标签/搜索