手写LRU

LRU(Least Recently Used)最近最少使用

LRU是一个非常经典的算法,一般可用如下场景描述:我们访问了很多个页面,使用内存去存储这些页面,随着时间的推移,页面越来越多,但是内存空间是有限的,所以需要删除一些页面,删除页面基于的策略是 删除最近最久没有使用过的页面。

手写LUR需要注意如下场景的问题:

  1. 访问已经存在的页面:先删除该页面,在重新添加
  2. 访问新的页面:若未超内存长度,直接放入;若超出内存长度,删除第一个,放入新的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class LRUCache{
constructor(length){
this.length = length;
this.data = new Map();
}

set(key,value){
let data = this.data;
//若存在内存中:删除原来的,重新放入
if(data.has(key)){
data.delete(key);
}
data.set(key,value);

//若超出内存长度:删除第一个元素
if(data.size>this.length){
let delKey = data.keys().next().value;
data.delete(delKey);
}
}

get(key){
let data = this.data;
// 未找到
if(!data.has(key)) return null;
// 找到:取值,删除,重新写入
const value = data.get(key);
data.delete(key);
data.set(key,value);
}
}
文章作者: qinwei
文章链接: https://qw-null.github.io/2022/07/22/手写LRU/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QW's Blog