lfu算法实现 LFU算法LFU算法过程是什么,呵LRU算?
LFU算法LFU算法过程是什么,呵LRU算?
LRU是最近最少使用的页面替换算法(least recently used),即首先消除最长未使用的页面!LFU是最近使用最少的页面替换算法(最少频繁使用),即在一定的时间内消除最少访问的页面!例如,第二方法的周期T是10分钟,如果每分钟分页一次,则主存储器块是3,如果所需的页方向是21234。请注意,调用第4页时,将出现缺页中断。根据LRU算法,应该替换第1页(第1页最长时间没有使用),但是根据LFU算法,应该替换第3页(第3页每十分钟才使用一次)。可以看出,LRU的关键是看页面最后使用了多长时间,而LFU的关键是看页面在一段时间内使用的频率
lfu算法优缺点?
在LFU算法中,可以为每个密钥维护一个计数器。每次存取钥匙时,计数器都会增加。计数器越大,访问频率就越高。
上述简单算法有两个问题:
在LRU算法中,它可以维护一个双向链表,然后简单地将被访问的节点移动到链表的开头,但在LFU中是不可行的。节点应严格按照计数器排序。当添加新节点或更新节点位置时,时间复杂度可能达到o(n)。
增加计数器的简单方法并不完美。访问模式将频繁更改。在一段时间内频繁访问的密钥在一段时间后可能很少被访问。仅仅增加计数器不能反映这一趋势。
第一个问题解决得很好。我们可以借鉴LRU实现的经验来维护一个待淘汰的密钥池。第二个问题的解决方案是记录上次访问密钥的时间,然后随着时间的推移减少计数器。
redis object的结构如下:
typedef struct redisobject{
unsigned类型:4
未签名编码:4
未签名lru:lru位/*LRU时间(相对于全局LRU时钟)或
*LFU数据(最低有效8位频率
*和最高有效16位访问时间)。*/
int refcount
void*ptr
}罗布
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。