缓存算法篇其一-----FIFO(先入先出)
FIFO是缓存算法中相对比较简单的一种,它的思想是,在缓存即将满的时候,先进队列的会先的置换出去,这就是我们讲的先入先出.在这里我们简单手写一个FIFO的cache类
* 1)存储数据:基于hashmap * 2)淘汰算法:FIFO(关键点在于如何记录key的添加顺序)
首先定义一个cache接口
然后写一个 cache的实现类,这里我们名为FifoCache(下面图片均为FifoCache类的代码)
* 构建先进先出Cache对象:缓存满了以后要优先淘汰最早放入的对象 * 1)存储数据:基于hashmap * 2)淘汰算法:FIFO(关键点在于如何记录key的添加顺序)
在这里我们通过队列记录key的添加顺序,Deque是JAVA中的双端队列
接下来向队列中添加数据,并判断缓存是否已满,并向cache中添加数据,
接下来是实现接口中的一些方法(获取,移除,清除,tostring,以及size)
最后写main方法,并在main方法中添加算法存数据,并且设置最大容量为3,这里用到了一种设计模式----装饰模式
执行如上代码结果,根据先入先出的原则,A,B会在缓存满时被替换出去,所以我们执行的结果是CDE
到这里,大家大概可以理解FIFO这种缓存算法了,下面说说它的弊端:
如果我们只是将先进入缓存中的移出去,那么万一先入缓存的在后面访问的次数会多怎么办,FIFO算法对于一些内存中访问频率比较高,但是放入的时间又比较早的对象而言,命中率会比较低,这就是FIFO的弊端,所以我们现在常用的缓存算法是LRU和LFU,那么这两个算法请听下回分解!
缓存算法篇其一-----FIFO(先入先出)相关推荐
- 缓存算法(页面置换算法)-FIFO、LFU、LRU
为什么80%的码农都做不了架构师?>>> 转自:http://www.cnblogs.com/dolphin0520/ 1.FIFO算法 FIFO(First in First ...
- fifo算法_缓存算法FIFO、LFU、LRU
阅读文本大概需要3分钟. 0x01:FIFO算法 FIFO(First in First out),先进先出.其实在操作系统的设计理念中很多地方都利用到了先进先出的思想,比如作业调度(先来先服务),为 ...
- 缓存算法(FIFO 、LRU、LFU三种算法的区别)
FIFO算法 FIFO 算法是一种比较容易实现的算法.它的思想是先进先出(FIFO,队列),这是最简单.最公平的一种思想,即如果一个数据是最先进入的,那么可以认为在将来它被访问的可能性很小.空间满的时 ...
- 缓存、缓存算法和缓存框架简介
英文原文:jtraining,译文:Lixiang 引言 我们都听过 cache,当你问他们是什么是缓存的时候,他们会给你一个完美的答案,可是他们不知道缓存是怎么构建的,或者没有告诉你应该采用什么标准 ...
- 缓存算法, cache
原文:http://www.cnblogs.com/duhuo/p/6210922.html 缓存算法 英文原文:jtraining 引言 我们都听过 cache,当你问他们是什么是缓存的时候,他们会 ...
- java客服系统_阿里Java内部资料:2020最全Java技术栈(架构篇+算法篇+大数据)
我只截图不说话,PPT大全,氛围研发篇.算法篇.大数据.Java后端架构!除了大家熟悉的交易.支付场景外,支撑起阿里双十一交易1682亿元的"超级工程"其实包括以下但不限于客服.搜 ...
- Android开发笔记(七十七)图片缓存算法
ImageCache 由于手机流量有限,又要加快app的运行效率,因此好的app都有做图片缓存.图片缓存说起来简单,做起来就用到很多知识点,可算是集Android技术之大全了.只要理解图片缓存的算法, ...
- 【文科生带你读JavaScript数据结构与算法】2. 双向链表与LRU缓存算法原理与实现(下)
上篇聊了聊双向链表(doubly linked list)这个数据结构,今天就来点更实际的,也可以用双链表来实现的一种生活工作中不可或缺的优化算法--LRU缓存(Least Recently Used ...
- 09 嵌入式C语言如何实现多级队列缓存(Queue、FIFO)
C语言如何实现多级队列缓存(Queue.FIFO) 作者 将狼才鲸 日期 2022-03-20 1.各种缓存结构: 基础:指针.链表.内存.数组. 数据结构基础:表.树.图(多对多). 缓冲区/buf ...
- 阿里巴巴内部:2022年全技术栈PPT分享(架构篇+算法篇+大数据)
我只截图不说话,PPT大全,氛围研发篇.算法篇.大数据.Java后端架构!除了大家熟悉的交易.支付场景外,支撑起阿里双十一交易1682亿元的"超级工程"其实包括以下但不限于客服.搜 ...
最新文章
- ThreadLocal为什么会内存泄漏(java高级面试)
- Android Databinding学习
- JavaWordCountCore
- python线程进程协程面试_Python学习经验之谈:关于协程的理解和其相关面试问题...
- 故障诊断:SLES12平台数据库启动失败ORA-27300
- java 取余_JAVA面试解析(有赞)
- 【Java从0到架构师】Spring - AOP
- SpringBoot2.0.0启动流程
- Photopia.V3.1.2 照明灯具设计软件_usb\
- 硬盘根目录里的Msdia80.dll文件是干什么用的
- FLUKE OTDR光纤断点测试仪OFP2-100-Q特色功能及亮点分析
- html标签和css的语法web的一些知识汇总
- centos7安装steam
- InstallShield打包
- Mac-homebrew使用(Mac下包管理工具)
- Python初学(2)—— 基本数据类型
- k8s、pod、容器、虚拟机概念
- python制作自己的专属二维码
- 微信浏览器 MP4播放失败,安卓下微信浏览器不能播放MP4问题的解决,gzip捣的鬼
- C与C++游戏项目练习4:弹跳的小球2.0
热门文章
- 新时达服务器说明书_新时达电梯主板操作服务器使用手册操作说明书使用说明...
- python 字符串时间带有月份简写 星期简写 时区, 格式化为其他样式
- Java基础(五十二)-IO编程
- html支付系统时间,中国人民银行支付系统介绍
- c语言用串口读温度值,温度传感器与串口
- zigbee学习之串口通信
- 基于树莓派语音控制—LED开关控制
- python读取excel画折线图_python读取excel数据绘制简单曲线图的完整步骤记录
- lwj_C#_作业 ListT应用
- word自动生成目录等