LRU是啥
临下班打算水个帖子再走,突然想起 LRU 缓存来着,我们先来看看啥是LRU
LRU ( Least Recently Used ) 字面意思就是最近使用过的。用代码实现 LRU 注意下面两点
1、新插入的数据应该被放置在最新的位置上等待被访问,如果超过最大存储空间,应该先删除最旧的,再插入
2、如果访问某个已存在的缓存后,该缓存应该被移动到最新的位置上
下面我们直接看代码,使用 ES6 Map 实现应该是最好的,也是最简单易懂的
class LRU {
constructor() {
this.maxCount = 3;
this.cache = new Map();
}
get(key){
if (!this.cache.has(key)){
return -1;
}
const val = this.cache.get(key);
this.cache.delete(key);
this.cache.set(key, val);
return val;
}
set(key, val){
if (this.cache.has(key)){
this.cache.delete(key)
}
if (this.cache.size === this.maxCount) {
this.cache.delete(this.cache.keys().next().value);
}
this.cache.set(key, val)
}
}
const lru = new LRU();
lru.set('a', 1)
lru.set('b', 2)
lru.set('c', 3)
console.log(lru); // [1, 2, 3]
lru.set('d', 4)
console.log(lru); // [2, 3, 4]
lru.get('b')
console.log(lru); // [3, 4, 2]
console.log(lru.get('e')) -1
还没有评论,来说两句吧...