原文地址:Golang实现LRU算法~
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的缓存淘汰算法,选择最近最久未使用的数据予以淘汰,该算法赋予每个数据一个访问字段,用来记录一个元素自上次被访问以来所经历的时间 t,当须淘汰一个数据时,选择现有数据中其 t 值最大的,即最近最少使用的页面予以淘汰。
Go可用链表数据结构来省去设置访问时间t字段,可将经常访问的数据插入链表头,而链表尾部的数据自然就成为最久未访问的数据。
代码实现如下:
package main
import (
"container/list"
"errors"
"sync"
)
type Lru struct {
max int
l *list.List
Call func(key interface{}, value interface{})
cache map[interface{}]*list.Element
mu *sync.Mutex
}
type Node struct {
Key