前端面试中常提到的LRU缓存策略怎么定义


今天主机评测网小编给大家分享一下前端面试中常提到的LRU缓存策略怎么定义的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

LRU

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

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

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

二、应用场景

  • redis

  • 浏览器浏览记录

  • vue中内置组件keep-alive

三、代码实现

实现的大概思路如下:

  • 创建一个LRUCache类

  • 定义容器以及容器的容量

  • 定义set方面,设置容器中的数据

  • 定义get方法,获取容器中的数据

classLRUCache{constructor(length){//定义容器容量this.length=length;//创建数据容器,生成一个空映射this.map=newMap();}//设置key值set(key,value){}//获取key值get(key){}}

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

set

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

  • 当容器长度超过设定的长度:先删除掉容器中的第一条数据

get

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

classLRUCache{constructor(length){//定义容器容量this.length=length;//定义数据容器this.map=newMap();}//设置key值set(key,value){//如果容器容量超过设定的容量if(this.map.size>=this.length){//等价于:letfirstKey=this.map.keys()[0]//map.keys().next()查询容器中第一条数据的key值//keys()会返回一个迭代器对象,包含了实力对象中的每一个key值letfirstKey=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值不存在返回nullif(!this.map.has(key)){returnnull;}//获取key值letvalue=this.map.get(key);//删除容器中的该条数据this.map.delete(key);//重新把该条数据添加到容器中this.map.set(key,value);returnvalue}}//创建实例对象并设置容器大小constlruCache=newLRUCache(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缓存策略怎么定义”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注主机评测网行业资讯频道。


上一篇:oracle数据库id自增及生成uuid问题怎么解决

下一篇:js获取对象属性值的方法怎么使用


Copyright © 2002-2019 测速网 https://www.inhv.cn/ 皖ICP备2023010105号 城市 地区 街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!
热门搜索