【转】缓存淘汰算法系列之3——FIFO类
原文地址:http://www.360doc.com/content/13/0805/16/13247663_304923435.shtml
1 FIFO
1.1. 原理
按照“先进先出(First In,First Out)”的原理淘汰数据。
1.2. 实现
FIFO队列,具体实现如下:
1. 新访问的数据插入FIFO队列尾部,数据在FIFO队列中顺序移动;
2. 淘汰FIFO队列头部的数据;
1.3. 分析
l 命中率
命中率很低,因为命中率太低,实际应用中基本上不会采用。
l 复杂度
简单
l 代价
实现代价很小。
2. Second Chance
2.1. 原理
FIFO算法的改进版,其思想是“如果被淘汰的数据之前被访问过,则给其第二次机会(Second Chance)”。
2.2. 实现
每个数据会增加一个访问标志位,用于标识此数据放入缓存队列后是否被再次访问过。
如上图,A是FIFO队列中最旧的数据,且其放入队列后没有被再次访问,则A被立刻淘汰;否则如果放入队列后被访问过,则将A移到FIFO队列头,并且将访问标志位清除。
如果所有的数据都被访问过,则经过一次循环后就会按照FIFO的原则淘汰数据。
2.3. 分析
l 命中率
命中率比FIFO高。
l 复杂度
与FIFO相比,需要记录数据的访问标志位,且需要将数据移动。
l 代价
实现代价比FIFO高。
3. Clock
3.1. 原理
Clock是Second Chance的改进版,通过一个环形队列,避免将数据在FIFO队列中移动。
3.2. 实现
如上图,其具体实现如下:
l 当前指针指向C,如果C被访问过,则清除C的访问标志,并将指针指向D;
l 如果C没有被访问过,则将新数据插入到C的位置,将指针指向D。
3.3. 分析
l 命中率
命中率比FIFO高,和Second Chance一样。
l 复杂度
与FIFO相比,需要记录数据的访问标志位,且需要将数据指针移动。
l 代价
实现代价比FIFO高,比Second Chance低。
4. FIFO类算法对比
|
对比点 |
对比 |
|
命中率 |
Clock = Second Chance > FIFO |
|
复杂度 |
Second Chance > Clock > FIFO |
|
代价 |
Second Chance > Clock > FIFO |
由于FIFO类算法命中率相比其他算法要低不少,因此实际应用中很少使用此类算法。
【转】缓存淘汰算法系列之3——FIFO类的更多相关文章
- 【转】缓存淘汰算法系列之1——LRU类
原文地址:http://www.360doc.com/content/13/0805/15/13247663_304901967.shtml 参考地址(一系列关于缓存的,后面几篇也都在这里有):htt ...
- 【转】缓存淘汰算法系列之2——LFU类
原文地址 :http://www.360doc.com/content/13/0805/16/13247663_304916783.shtml 1. LFU类 1.1. LFU 1.1.1. 原理 L ...
- 图解缓存淘汰算法二之LFU
1.概念分析 LFU(Least Frequently Used)即最近最不常用.从名字上来分析,这是一个基于访问频率的算法.与LRU不同,LRU是基于时间的,会将时间上最不常访问的数据淘汰;LFU为 ...
- 缓存淘汰算法之FIFO
前段时间去网易面试,被这个问题卡住,先做总结如下: 常用缓存淘汰算法 FIFO类:First In First Out,先进先出.判断被存储的时间,离目前最远的数据优先被淘汰. LRU类:Least ...
- 昨天面试被问到的 缓存淘汰算法FIFO、LRU、LFU及Java实现
缓存淘汰算法 在高并发.高性能的质量要求不断提高时,我们首先会想到的就是利用缓存予以应对. 第一次请求时把计算好的结果存放在缓存中,下次遇到同样的请求时,把之前保存在缓存中的数据直接拿来使用. 但是, ...
- 04 | 链表(上):如何实现LRU缓存淘汰算法?
今天我们来聊聊“链表(Linked list)”这个数据结构.学习链表有什么用呢?为了回答这个问题,我们先来讨论一个经典的链表应用场景,那就是+LRU+缓存淘汰算法. 缓存是一种提高数据读取性能的技术 ...
- 数据结构与算法之美 06 | 链表(上)-如何实现LRU缓存淘汰算法
常见的缓存淘汰策略: 先进先出 FIFO 最少使用LFU(Least Frequently Used) 最近最少使用 LRU(Least Recently Used) 链表定义: 链表也是线性表的一种 ...
- 链表:如何实现LRU缓存淘汰算法?
缓存淘汰策略: FIFO:先入先出策略 LFU:最少使用策略 LRU:最近最少使用策略 链表的数据结构: 可以看到,数组需要连续的内存空间,当内存空间充足但不连续时,也会申请失败触发GC,链表则可 ...
- 聊聊缓存淘汰算法-LRU 实现原理
前言 我们常用缓存提升数据查询速度,由于缓存容量有限,当缓存容量到达上限,就需要删除部分数据挪出空间,这样新数据才可以添加进来.缓存数据不能随机删除,一般情况下我们需要根据某种算法删除缓存数据.常用淘 ...
随机推荐
- 201521123032 《Java程序设计》第14周学习总结
0. 本周课程设计发布 Java课程设计 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓 ...
- 201521123030 《Java程序设计》 第13周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...
- eclipse 项目引入第三方jar包 3种方法
我们在用Eclipse开发程序的时候,经常要用到第三方jar包.引入jar包不是一个小问题,由于jar包位置不清楚,而浪费时间.下面配图说明3种Eclipse引入jar包的方式. 1.最常用的普通操作 ...
- allego 输出报告说明
List of Available Reports Assigned Function Report Lists all assigned functions, sorted by function ...
- UDP接收百万级数据的解决方案
小序 到新公司不久,就接到一个任务:有个发送方,会通过udp发送一些信息,然后服务接收到信息后保存到数据库的一张表A,保存的这些数据在经过一系列处理,处理完成后累积到另一张表B,然后清空处理的表A的数 ...
- oracle 表查询(一)
通过scott用户下的表来演示如何使用select语句,接下来对emp.dept.salgrade表结构进行解说. emp 雇员表字段名称 数据类型 是否为空 备注-------- ...
- js时间戳和日期字符串相互转换
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...
- Css Html 大风车
<div style = "height:500px;width:500px;position:static;float:left;"><div class=&q ...
- 【bzoj2761】[JLOI2011]不重复数字
给出N个数,要求把其中重复的去掉,只保留第一次出现的数. 例如,给出的数为1 2 18 3 3 19 2 3 6 5 4,其中2和3有重复,去除后的结果为1 2 18 3 19 6 5 4. Inpu ...
- NOIP2017SummerTraining0726
三道比较简单的题,还以为是八校考试的题目,但是并不是,无语了,第三题其实看了挺久的,一看到图,就想到了二分图,网络流之类的算法,但是尽力往这个方向想了好久都没什么思路, 最后从简单入手,然而没什么结果 ...