美文网首页
理解LRU算法

理解LRU算法

作者: 0月 | 来源:发表于2021-09-12 13:06 被阅读0次

什么是LRU?

英文就是Least Recently Used,最近最久未使用法。它是按照一个非常著名的计算机操作系统基础理论得来的:

最近使用的数据会在未来一段时期内仍然被使用,已经很久没有使用的数据很有可能在未来较长的一段时间内仍然不会被使用

基于这个思想,会存在一种缓存淘汰机制,每次从内存中找到最久未使用的数据然后置换出来,从而存入新的数据!它的主要衡量指标是使用的时间,附加指标是使用的次数。在计算机中大量使用了这个机制,它的合理性在于优先筛选热点数据,所谓热点数据,就是最近最多使用的数据!

LRU实现

class LRU {
  constructor (max = 10) {
    this.max = max; // 最大缓存数量
    this.list = []; // 记录key,最新的在尾部,最久未使用在头部
    this.map = new Map(); // 储存值
  }

  // 设置数据
  setItem (key, val) {
    if (this.map.has(key)) {
      this._updateKey(key);
      return this.map.set(key, val); // 已有的直接设置更新
    }
    this.list.push(key);
    if (this.list.length > this.max) {
      const unUsedKey = this.list.shift(); // 超出最大限制,去掉前面的key
      this.map.delete(unUsedKey);// 去掉无用的item
    }
    this.map.set(key, val);
  }

  // 获取数据
  getItem (key) {
    this._updateKey(key);
    return this.map.get(key);
  }

  // 更新key在数组中的位置
  _updateKey (key) {
    const index = this.list.findIndex(i => i === key);
    if (index === -1) return;
    // 拿出来的key放到尾部
    this.list.splice(index, 1);
    this.list.push(key);
  }
}

LRU的日常应用场景

  • 对于频繁切换的数据,并且数据短期不会变化,避免每次切换都要重新走一遍获取数据流程浪费时间
  • 数据无限多,但是需要一个固定单位数的数据存放处

不适用的场景

  • 数据每次获取都不一定相同的场景
  • 数据单位数少,而数据存放处足够大

LRU算法与备忘录模式的区别

之前我写了另外一篇文章 js性能优化-利用备忘模式进行结果缓存

  • 共同点:都是对不变的数据进行存储
  • 不同点:LRU 的关注点在缓存淘汰机制, 而备忘录模式关注点在于数据的二次获取效率

相关文章

  • Algorithm进阶计划 -- LRU 与 LFU 算法

    LRU 与 LFU 算法LRU 算法LFU 算法 1. LRU 算法 LRU 算法是一种缓存淘汰策略,是 Leas...

  • 理解LRU算法

    什么是LRU? 英文就是Least Recently Used,最近最久未使用法。它是按照一个非常著名的计算机操作...

  • 缓存淘汰算法--LRU算法

    缓存淘汰算法--LRU算法 1. LRU 1.1 原理 LRU(Least recently used,)算法根据...

  • 理解LruCache

    理解LruCache LRU(Least Recently Used)缓存算法,即为最近最少使用算法,它的核心思想...

  • 缓存相关

    cache淘汰算法:LIRS 算法 缓存那些事 Redis缓存淘汰算法,LRU算法,LRU算法讲解

  • LRU Cache理解

    LRU Cache 1. 概念解析,LRU Cache算法 Lru Cache算法就是Least Recently...

  • 缓存 -- LRU算法

    什么是LRU算法 LRU算法的全称Least Recently Used。即最近最少使用。LRU算法是内存管理的一...

  • 高级算法

    请你讲讲LRU算法的实现原理? 考察点:LRU算法参考回答: ①LRU(Least recently used,最...

  • python内置缓存lru_cache

    lru_cache LRU算法原理 LRU (Least Recently Used,最近最少使用) 算法是一种缓...

  • LruCache原理和源码分析(一)

    一、Lru算法 Lru算法:最近最少使用算法; 算法的核心关键类是LinkedHashMap。 基本算法:将key...

网友评论

      本文标题:理解LRU算法

      本文链接:https://www.haomeiwen.com/subject/mpseiltx.html