golang有用的库及工具 之 缓存淘汰算法--LRU算法

来源:互联网 发布:零式战斗机知乎 编辑:程序博客网 时间:2024/05/25 01:35

1. LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。

2. 实现

最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:

1. 新数据插入到链表头部;

2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;

3. 当链表满的时候,将链表尾部的数据丢弃。


3. 分析

【命中率】

当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。

【复杂度】

实现简单。

【代价】

命中时需要遍历链表,找到命中的数据块索引,然后需要将数据移到头部。


4. LRU在golang中的使用。
库:github.com/karlseguin/ccache

func main() {   var cache = ccache.New(ccache.Configure().MaxSize(1000).ItemsToPrune(100))   cache.Set("aaa", 1234, time.Second)   time.Sleep(time.Second*2)   i := cache.Get("aaa")   fmt.Println(i.Value(), i.Expires())}


ccache  库,在golang中应用中对于内存存储使用比较频繁次数比较多的,可以考虑用LRU。