当前位置:网站首页 > 数据工程 > 正文

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

🐱 个人主页:不叫猫先生
🙋‍♂️ 作者简介: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’)被删除了。

在这里插入图片描述
然后获取class的值,发现key为class的这条数据跑最后了。因为在get时候先delete后set了。

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

在这里插入图片描述

到此这篇前端面试中经常提到的LRU缓存策略详解_lru缓存机制 leetcode的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 【愚公系列】软考中级-软件设计师 036-软件工程基础(需求分析)_软件工程课程设计需求分析2024-10-30 16:19:55
  • 《大数据智能风控 模型、数据和业务实践》导读_大数据风控模型包括2024-10-30 16:19:55
  • 【数据开发】大数据岗位,通用必备技术栈(数据分析、数据工程、数据科学)_大数据技术岗位有哪些2024-10-30 16:19:55
  • 基于亚马逊云科技新功能:Amazon SageMaker Canvas无代码机器学习—以构建货物的交付状态检测模型实战为例深度剖析以突显其特性_基于亚马逊云科技新功能:Amazon SageMaker Canvas无代码机器学习—以构建货物的交付状态检测模型实战为例深度剖析以突显其特性2024-10-30 16:19:55
  • 使用字典向量化进行数据特征离散化_使用字典向量化进行数据特征离散化的方法2024-10-30 16:19:55
  • 数仓建模—数据网格_数仓数据模型2024-10-30 16:19:55
  • Pytorch实现YOLOv3训练自己的数据集_yolov4训练自己的数据 pytorch2024-10-30 16:19:55
  • 数据库, 数据仓库, 数据集市,数据湖,数据中台_数据湖和数据仓库的区别2024-10-30 16:19:55
  • Python数据分析与机器学习在电子商务推荐系统中的应用_python数据分析推荐课程2024-10-30 16:19:55
  • CAN总线与CANOPEN协议入门_can总线和canopen2024-10-30 16:19:55
  • 全屏图片