HONG之间
上班折腾,下班折腾

Power by hongyu

文章均为原创,转载请务必注明出处

对于前端的LRU、LFU缓存优化

0
作者:hongyu
2024-10-21 14:15:22

这两种都属于内存淘汰算法,当设计实例最大数到达最大值或者内存到达瓶颈时,则需要淘汰一些不常用或者是时间久远的内存实例。

LRU

LRU淘汰的是不用时间最长的实例,这种算法应用在例如缓存系统这种对使用时间比较在意的系统中。

LFU

LRU淘汰的是使用频率较少的实例,这种算法应用在例如文件系统这种对使用频率比较在意的系统中。

前端应用

LRU可用于前端的缓存系统中时,我们根据算法概念,可以这么设计LRU缓存系统。

class MyCache {
    cacheMap = new Map()
    timeMap = new Map()
    max = 10
    constructor(max) {
        if(max) this.max = max
    }
 
 set(key, value) {
     if(cacheMap.has(key) || cacheMap.size < this.max) {
       cacheMap.set(key, value)
       timeMap.set(key, Date.now())
     } else {
        const min = Math.min(...timeMap.values())
        const ets = timeMap.entries()
        let etsValue = ets.next()
        while(!etsValue.done) {
            if(etsValue.value[1] === min) {
                cacheMap.delete(etsValue.value[0])
                timeMap.delete(etsValue.value[0])
                break
            }
            etsValue = ets.next()
        }
     }
 }
 
     get(key) {
         const val =  cacheMap.get(key)
         if(val) {
             timeMap.set(key, Date.now())
             return val
         } else {
         	throw new Error("缓存不存在")
         }
     }
}

评论一下