LRU简介
LRU 缓存淘汰算法就是一种常用策略。LRU 的全称是 Least Recently Used,也就是说我们认为最近使用过的数据应该是是「有用的」,很久都没用过的数据应该是无用的,内存满了就优先删那些很久没用过的数据。
过程思考
我的思路是这样的:我们维护一个数组,越靠近数组尾部的结点是越早之前访问的。当有一个新的数据被访问时,我们遍历数据
1.如果此数据之前已经被缓存在数组中了,我们遍历得到这个数据,返回成功,并将其从原来的位置删除,然后再插入到数组的头部。
2.如果此数据没有在缓存在数组中,又可以分为两种情况:
- 如果此时缓存未满,则将此数据直接插入到数组的头部;
- 如果此时缓存已满,则将数组最后一个数据删除,将新的数据结点插入数组的头部。
实现
//数组来实现LRU,整体来说效率不高,这里主要是为了知道该淘汰策略是怎么回事
package main
import "fmt"
type cache struct {
arr []int
MaxLen int //缓存的最大元素个数
}
func (c *cache)Get(value int) {
var flag bool
for i,v:=range c.arr{
if v==value{
flag=true
//数据在第一个
if i==0{
return
}else {
c.arr[i