这两种都属于内存淘汰算法,当设计实例最大数到达最大值或者内存到达瓶颈时,则需要淘汰一些不常用或者是时间久远的内存实例。
LRU淘汰的是不用时间最长的实例,这种算法应用在例如缓存系统这种对使用时间比较在意的系统中。
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("缓存不存在")
}
}
}