前端面试中经常提到的LRU缓存策略详解

这篇具有很好参考价值的文章主要介绍了前端面试中经常提到的LRU缓存策略详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🐱 个人主页:不叫猫先生
🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀!
💫优质专栏:vue3从入门到精通、TypeScript从入门到实践
📢 资料领取:前端进阶资料以及文中源码可以找我免费领取
🔥 前端学习交流:博主建立了一个前端交流群,汇集了各路大神,一起交流学习,期待你的加入!(文末有我wx或者私信)

LRU

LRU(Least Recently Used)最近最少使用缓存策略,根据历史数据记录,当数据超过了限定空间的时候对数据清理,清理的原则是对很久没有使用到过的数据进行清除

一、为什么要使用Map是来定义容器

Map在保存数据时会按照记住存储数据时候的顺序,这样存储的数据是有序列的,并且会维护键值对的插入顺序,Map存储数据的键值可以是任意类型(对象或者基本类型都可),Map提供了get、set、delete方法十分方便;而Object的话是无序,当然也可以使用Array。另外Map的算法复杂度是O(1),处理数据更迅速。

二、应用场景

  • redis
  • 浏览器浏览记录
  • vue中内置组件keep-alive

三、代码实现

实现的大概思路如下:

  • 创建一个LRUCache类
  • 定义容器以及容器的容量
  • 定义set方面,设置容器中的数据
  • 定义get方法,获取容器中的数据
class LRUCache {
  constructor(length) {
    // 定义容器容量
    this.length = length;
    // 创建数据容器,生成一个空映射
    this.map = new Map();
  }
  // 设置key值
  set(key, value) {
  }
  // 获取key值
  get(key) {}
}

接下来就是对set方法和get方法的处理:

  • set

    • 当容器长度不超过设定的长度:设置key值,但是为了达到缓存策略的效果,需要我们先删除数据,后添加到容器的最后一条
    • 当容器长度超过设定的长度:先删除掉容器中的第一条数据
  • get

    • 先获取数据值,然后删除该条数据,再设置数据到最后

class LRUCache {
  constructor(length) {
    // 定义容器容量
    this.length = length;
    // 定义数据容器
    this.map = new Map();
  }
  // 设置key值
  set(key, value) {
    // 如果容器容量超过设定的容量
    if (this.map.size >= this.length) {
      // 等价于:let firstKey = this.map.keys()[0]
      //map.keys().next()查询容器中第一条数据的key值 
      //keys()会返回一个迭代器对象,包含了实力对象中的每一个key值
      let firstKey = this.map.keys().next().value;
      //删除容器中第一条数据
      this.map.delete(firstKey);
    }

    // 容器中存在key就先删除掉
    if (this.map.has(key)) {
      this.map.delete(key);
    }
    // 删除后重新加入该条数据
    this.map.set(key, value);
  }
  // 获取key值
  get(key) {
    // 获取key值不存在返回null
    if (!this.map.has(key)) {
      return null;
    }
    // 获取key值
    let value = this.map.get(key);
    //删除容器中的该条数据
    this.map.delete(key);
    //重新把该条数据添加到容器中
    this.map.set(key, value);
    return value
  }
}
// 创建实例对象并设置容器大小
const lruCache = new LRUCache(5)

添加6条数据

        lruCache.set('name', 'zhangsan')
		lruCache.set('class', 'xinguan')
		lruCache.set('age', 19)
		lruCache.set('sex', '男')
		lruCache.set('occupation', '前端工程师')
		lruCache.set('year', '2023')
		console.log(lruCache, 'lruCache')

对lruCache添加了6条数据并按顺序排列,打印出来只剩5条数据,添加的第一条(‘name’, ‘zhangsan’)被删除了。

前段lru缓存,前端需要了解的算法,前端,LRU缓存策略,javascript
然后获取class的值,发现key为class的这条数据跑最后了。因为在get时候先delete后set了。

	console.log(lruCache.get('class'), 'lruCache')//xinguan

前段lru缓存,前端需要了解的算法,前端,LRU缓存策略,javascript文章来源地址https://www.toymoban.com/news/detail-793928.html

到了这里,关于前端面试中经常提到的LRU缓存策略详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 面试题常考:LRU缓存

    题目: 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果 key 存在于缓存中,则返回的值,否则返回 -1 。 void put(int key, int value) 如果 key 已经

    2024年02月09日
    浏览(23)
  • 面试遇到算法题:实现LRU缓存

    请你设计并实现一个满足 LRU (最近最少使用) 缓存约束的数据结构。 这是一道大厂面试高频出现的算法题,难度为⭐️⭐️⭐️,属于中等,老铁们来一起看看这个题该怎么解? 没有废话,翠花,上酸菜! 为了实现一个满足 LRU (最近最少使用)缓存约束的数据结构,我们需

    2024年04月25日
    浏览(30)
  • 【前端方案】-表格排序列LRU缓存方案

    目标: 排序后的表格列,页面刷新或者用户重新登录后,能够保持之前的操作排序 完成效果: 解决方案: 利用localstorage对排序后的表格列属性进行存储,页面刷新或者用户重新进入该页面时都先从localstorage中读取 1.存储方式:localstorage(key,value) key - 表格增加配置属性

    2024年02月08日
    浏览(14)
  • 【前端方案】-表格排序列LRU缓存方案(二)

    一. 目标 个人账号的设置记忆功能-避免用户每次登录之后重新对表单字段做展示设置 二、存储方案 轻量方案 结合localstorage低容量存储(5M),根据LRU只存最近访问的20至30张表格列配置数据 全量方案 大内存G级别,使用indexedDb进行存储,有多少表格操作列数据就存多少, 结

    2024年02月08日
    浏览(21)
  • LeetCode讲解篇之面试题 16.25. LRU 缓存

    设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目。 它应该支持以下操作: 获取数据 get 和 写入数据 put 。

    2024年02月09日
    浏览(34)
  • 前端理解的HTTP缓存(作用、缓存策略、缓存控制机制、应用)

    目录 一、HTTP缓存有什么作用? 二、 浏览器的缓存策略有哪些? 1、强缓存(Expires、Cache-control) 2、协商缓存(Last-Modified、ETag) 3、缓存过程是什么? 三、浏览器缓存控制机制有哪些? 1、使用HTML Meta 标签 2、使用HTTP头信息控制缓存 四、哪些请求不能被缓存? 五、部署时

    2024年02月15日
    浏览(28)
  • 前端理解的HTTP缓存(缓存的过程/策略/控制机制/作用和应用)

    目录 一、HTTP缓存有什么作用? 二、 浏览器的缓存策略有哪些? 1、强缓存(Expires、Cache-control) 2、协商缓存(Last-Modified、ETag) 3、缓存过程是什么? 三、浏览器缓存控制机制有哪些? 1、使用HTML Meta 标签 2、使用HTTP头信息控制缓存 四、哪些请求不能被缓存? 五、部署时

    2024年02月16日
    浏览(30)
  • 前端面试:【性能优化】前端缓存、CDN、懒加载和预加载

    亲爱的前端开发者,Web性能对用户体验至关重要。如果你想让你的网站更快、更具吸引力,就需要关注前端性能优化。在这篇文章中,我们将深入探讨四个关键的性能优化策略:前端缓存、CDN(内容分发网络)、懒加载和预加载,以助你构建高性能的Web应用。 1. 前端缓存:优

    2024年02月11日
    浏览(31)
  • 【面试题】如何理解 前端设计模式-测策略模式?

    前端面试题库 ( 面试必备)              推荐:★★★★★ 地址:前端面试题库 【国庆头像】- 国庆爱国 程序员头像!总有一款适合你! 策略(Strategy)模式的定义:该模式定义了一 系列算法 ,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响使用

    2024年02月07日
    浏览(32)
  • 【数据结构】LRU缓存的简单模拟实现(leetcode力扣146LRU缓存)

    LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。 Cache的容量有限,因此当Cache的容量用完后,而又有新的内容需要添加进来时, 就需要挑选并舍弃原有的部分内容,从而腾出空间来放新内容。LRU Cache 的替换原则就是将最近最少使用的内容替换掉。

    2024年02月03日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包