面试那些事

JS实现LRU缓存函数

2021-11-28  本文已影响0人  _静夜听雨_

1.LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的,是根据页面调入内存后的使用情况进行决策了。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU算法就是将最近最久未使用的页面予以淘汰。

2.操作系统课程里有学过,在内存不够的场景下,淘汰旧内容的策略。LRU … Least Recent Used,淘汰掉最不经常使用的。可以稍微多补充两句,因为计算机体系结构中,最大的最可靠的存储是硬盘,它容量很大,并且内容可以固化,但是访问速度很慢,所以需要把使用的内容载入内存中;内存速度很快,但是容量有限,并且断电后内容会丢失,并且为了进一步提升性能,还有CPU内部的 L1 Cache,L2 Cache等概念。因为速度越快的地方,它的单位成本越高,容量越小,新的内容不断被载入,旧的内容肯定要被淘汰,所以就有这样的使用背景。

3.JS实现LRU缓存函数

class LRUCache {
    constructor(size){
        this.size = size;
        this.cache = new Map();
    }
    get(key){
        const hasKey = this.cache.has(key);
        if(hasKey){
            const val = this.cache.get(key);
            this.cache.delete(key);
            this.cache.set(key, val);
            return val;
        }else{
            return -1;
        }
    }
    set(key, value){
        const hasKey = this.cache.has(key);
        if(hasKey){
            this.cache.delete(key);
        }
        this.cache.set(key, value);
        if(this.cache.size > this.size){
            // this.cache.keys().next().value用于获取最前面(即使用次数最少的key),然后删除
            this.cache.delete(this.cache.keys().next().value);
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读