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,则数据访问顺序如下:

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)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值