LRU和LFU缓存算法

最近最少使用(LRU)

首先丢弃最近最少使用的项目。该算法需要跟踪何时使用的内容,如果想要确保算法总是丢弃最近最少使用的项目,则这是昂贵的。该技术的一般实现需要保持高速缓存行的“年龄位”并基于年龄位跟踪“最近最少使用”高速缓存行。在这样的实现中,每次使用高速缓存行时,所有其他高速缓存行的年龄都会改变。

LRU高速缓存消除过程
在这里插入图片描述

Golang实现:github.com/golang/groupcache/blob/master/lru/lru.go

最少使用(LFU)

最不常用(LFU)是一种用于管理计算机内存的缓存算法。该方法的标准特征涉及系统跟踪块在内存中被引用的次数。当缓存已满并需要更多空间时,系统将清除具有最低参考频率的项目。

使用LFU算法的最简单方法是为加载到缓存中的每个块分配计数器。每次对该块进行引用时,计数器增加1。当缓存达到容量并且有一个新块等待插入时,系统将搜索具有最低计数器的块并将其从缓存中删除。

LFU高速缓存消除过程
在这里插入图片描述

Golang实施:github.com/bluele/gcache/blob/master/lfu.go

LRU和LFU之间的区别

例如,如果缓存大小为3,则数据访问顺序如下:

扫描二维码关注公众号,回复: 5931103 查看本文章

set(2,2),set(1,1),get(2),get(1),get(2),set(3,3),set(4,4)

当set(4,4)LFU算法消除后(3,3),LRU将被淘汰(1,1)。

猜你喜欢

转载自blog.csdn.net/baidu_36327010/article/details/89371484