一种LFU淘汰算法
来源:互联网 发布:it招标网 编辑:程序博客网 时间:2024/06/06 15:37
以前介绍过LRU高效的实现方式:
一种O1性能的LRU算法 http://blog.csdn.net/herm_lib/article/details/6535698
今天也介绍一下LFU的实现方法。LRU是最近最少使用算法,就是把最早才访问的数据淘汰掉。LFU是最近最不常用算法,就是某一段时间内被用到最少的淘汰掉。
LFU时间周期
使用次数的时间长度,这个时间不能太短,短了体现不出哪些数据是热点;同样也不能太长,太长的话,某一个时间点的对某个数据的访问峰值可以长期影响我们的淘汰策略。一般实现的算法可以根据业务特点去调节这个参数。
上个周期访问次数权重
在本周期开始的时候,最粗暴的做法是把所有数据的访问数据全置成0。这样上次的访问热点就体现不出来了。考虑引入一个可调整的权重,这个权重一般建议与访问次数成反比的关系。
这个算法实现比LRU稍微简单一点。
数据访问次数数组
数组内容是数据索引+访问次数,这个数组做成线性有序数组,按访问次数降序排列。
哈希表
数据索引作为Key,指向数据访问时间数组的下标。
访问cache
查哈希表,查到,返回数据。根据哈希表的值(就是上面的数组下标),定位到数组元素,将数组元素访问次加1,然后和后面元素做调整。
没查到,数据不在cache中。如果cache未满,把该数据索引加到访问次数数组的尾部。
满了,就要淘汰了,直接把访问次数数组的最后一个元素对应的数据淘汰掉;把新数据加到哈希表,同事将访问次数元素加到数组尾部。
对整个cache启动一个以LFU时间周期长度的定时器,定时时间到,就整个cache访问数组的访问次数按权重降低。另外,如果某个数据的访问次数达到最大值了,所有的访问次数也按权重降低。权重降低是一个对整个访问次数数组的遍历过程,但一般这个周期时间不会太短(至少分钟级),而且降权重过程时间很短(100W个数据约10ms),整个过程不会产生CPU和内存访问的峰值。
- 一种LFU淘汰算法
- 缓存淘汰算法--LFU算法
- 缓存淘汰算法--LFU算法
- 缓存淘汰算法--LFU算法
- 淘汰算法LRU与LFU
- 缓存淘汰算法系列之2 --- LFU
- 缓存淘汰算法 LFU and LRU
- 缓存学习-[转]缓存淘汰算法--LFU算法
- 缓存淘汰算法系列之2——LFU类
- 缓存淘汰算法 —— LFU-Aging(Java实现)
- 缓存淘汰算法系列之2——LFU类
- 两种常见的缓存淘汰算法LFU&LRU
- 缓存淘汰算法系列之2——LFU类
- 基于最少使用频次的LRU,LFU缓存淘汰算法
- 常用缓存淘汰算法(LFU、LRU、ARC、FIFO、MRU)
- LFU算法
- LRU 与 LFU 算法
- LRU与LFU调度算法
- Windows 8下载地址和安装图文教程
- libgdx之FrictionJoint关节
- 怎样重载强制类型转换操作符
- 2012年第二周任务 报告
- error LNK2005: _DllMain@12 already defined
- 一种LFU淘汰算法
- 面试题1
- DLL的灾难 --- DEBUG与RELEASE版本不能交叉调用
- linux poll 和 等待队列休眠的关系
- dll如何调试
- 【补充】VMware
- ajax+json+dom+php+mysql省市县三级联动
- 并且确定已经识别出了主要的HTML5技术风险
- 进行api的HTML5inlinehook操作(飞秋官方下载)