摘要: 1FIFO1.1.原理按照“先进先出(FirstIn,FirstOut)”的原理淘汰数据。1.2.实现FIFO队列,具体实现如下:1.新访问的数据插入FIFO队列尾部,数据在FIFO队列中顺序移动;2.淘汰FIFO队列头部的数据;1.3.分析l命中率命中率很低,因为命中率太低,实际应用中基本上不会采用。l复杂度简单l代价实现代价很小。2.SecondChance2.1.原理FIFO算法的改进版,其思想是“如果被淘汰的数据之前被访问过,则给其第二次机会(SecondChance)”。2.2.实现每个数据会增加一个访问标志位,用于标识此数据放入缓存队列后是否被再次访问过。如上图,A是FIFO队列中 阅读全文
posted @ 2012-12-05 15:59 OYK 阅读(1983) 评论(0) 推荐(0) 编辑
摘要: 1.LFU类1.1.LFU1.1.1.原理LFU(LeastFrequentlyUsed)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。1.1.2.实现LFU的每个数据块都有一个引用计数,所有数据块按照引用计数排序,具有相同引用计数的数据块则按照时间排序。具体实现如下:1.新加入数据插入到队列尾部(因为引用计数为1);2.队列中的数据被访问后,引用计数增加,队列重新排序;3.当需要淘汰数据时,将已经排序的列表最后的数据块删除。1.1.3.分析l命中率一般情况下,LFU效率要优于LRU,且能够避免周期性或者偶发性的操作导致缓存命中率下降 阅读全文
posted @ 2012-12-05 15:58 OYK 阅读(2413) 评论(0) 推荐(1) 编辑
摘要: 1.LRU1.1.原理LRU(Leastrecentlyused,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。1.2.实现最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1.新数据插入到链表头部;2.每当缓存命中(即缓存数据被访问),则将数据移到链表头部;3.当链表满的时候,将链表尾部的数据丢弃。1.3.分析【命中率】当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。【复杂度】实现简单。【代价】命中时需要遍历链表,找到命中的数据块索引,然后需要 阅读全文
posted @ 2012-12-05 15:53 OYK 阅读(19250) 评论(5) 推荐(7) 编辑