算法之最近最少使用LRU
layout: post title: "算法之最近最少使用LRU" subtitle: " "1.HashMap,存放数据 2.双向链表节点,确保最新被使用的节点在链表头 3.缓存已满,从链表尾删除节点 "" date: 2018-11-11 07:00:00 author: "青乡" header-img: "img/post-bg-2015.jpg" catalog: true tags: - DataStructure&Algorithm - cache - 缓存 - LRU
是什么
1.缓存已满
要删除数据
2.删除的算法
就是最近最少使用算法。//Least Recent Use(LRU)
应用场景
缓存系统。//1.memcache 2.自己实现
怎么实现
总结一下核心操作的步骤:
1.add(key, value)
首先在 HashMap 找到 Key 对应的节点,如果节点存在,更新节点的值,并把这个节点移动队头。如果不存在,需要构造新的节点,并且尝试把节点塞到队头,如果LRU空间不足,则通过 tail 淘汰掉队尾的节点,同时在 HashMap 中移除 Key。
2.get(key)
通过 HashMap 找到 LRU 链表节点,因为根据LRU原理,这个节点是最新访问的,所以要把节点插入到队头,然后返回缓存的值。
数据结构
1.如何存放数据
map //HashMap 2.如何知道哪个数据最近最少使用?
链表 //双向 //自己实现双向链表节点(key,value,前置节点,后置节点)
注:LinkedList是数组 + 双向链表(节点)。
写数据
1.没有 //添加
2.有 //覆盖
3.缓存已满 //1.删除旧的数据(从链表尾删除) 2.添加数据
以上任何一种情况,添加数据到map之后,都需要插入节点到链表头。
读数据
1.读数据
2.把读到的数据,插入到链表头 //头的数据,表示最新被使用过的数据
参考
zhuanlan.zhihu.com/p/34133067
转载于:https://juejin.im/post/5c0a0bbd51882551236eba71
算法之最近最少使用LRU相关推荐
- 计组之存储系统:7、Cache替换算法(随机算法RAND、先进先出算法FIFO、近期最少使用LRU、最近不经常使用LFU)
7.Cache替换算法 思维导图 存在的问题 替换算法解决的问题 Cache替换算法 随机算法(RAND) 先进先出算法(FIFO) 近期最少使用(LRU) 最近不经常使用(LFU) 思维导图 存在的 ...
- java 最少使用(lru)置换算法_「Redis源码分析」Redis中的LRU算法实现
如果对我的文章感兴趣.希望阅读完可以得到你的一个[三连],这将是对我最大的鼓励和支持. LRU是什么 LRU(least recently used)是一种缓存置换算法.即在缓存有限的情况下,如果有新 ...
- 最近最少使用LRU(Least Recently Used)算法java实现
最近最少使用LRU(Least Recently Used)算法java实现 一.使用LinkedHashMap算法实现 二.手撸 LRU 算法实现(Hash表 + 双向链表) 三.总结 最近最少使用 ...
- java 最少使用(lru)置换算法_一篇文章学会如何基于LRU-K算法设计本地缓存实现流量削峰...
专注于Java领域优质技术号,欢迎关注 作者:一个Java菜鸟 1.背景介绍 1.1.现象 QPS突然增长2倍以上(45w~60w每分钟) 将产生下面一些问题: 1)响应接口响应时长增加了5倍(qps ...
- java 最少使用(lru)置换算法_[内附完整源码和文档] 基于C#的可视化虚拟存储器管理(LUR算法)...
一.目的要求 理解虚拟存储器概念,并掌握分页式存储管理地址转换和缺页中断的处理过程.用高级语言模拟请求分页式虚拟存储器的工作过程和页面置换算法LRU. 二.准备知识 2.1 分页式存储管理原理 在存储 ...
- lru算法实现 redis_Redis中的lru算法实现
lru是什么 lru(least recently used)是一种缓存置换算法.即在缓存有限的情况下,如果有新的数据需要加载进缓存,则需要将最不可能被继续访问的缓存剔除掉.因为缓存是否可能被访问到没 ...
- LRU算法思想及手写LRU实现
文章目录 LRU思路及实现代码 思想 方案一.数组 思路 问题 方案二.链表 思路 问题 方案三.双向链表+哈希表 思路 为什么这里要用双链表呢,单链表为什么不行? 哈希表里面已经保存了 key ,那 ...
- java 最少使用(lru)置换算法_「面试」LRU了解么?看看LinkedHashMap如何实现LRU算法...
以下内容均是本人原创,希望你看完之后能有更多更深入的了解,欢迎关注➕ 问题:使用Java完成一个简单的LRU算法 什么是LRU算法 LRU(Least Recently Used),也就是最近最少使用 ...
- java 最少使用(lru)置换算法_缓存置换算法 - LRU算法
LRU算法 1 原理 对于在内存中并且不被使用的数据块就是LRU,这类数据需要从内存中删除,以腾出空间来存储常用的数据. LRU算法(Least Recently Used,最近最少使用),是内存管理 ...
最新文章
- 数据结构题及c语言版答案9.14,十套数据结构试题+答案+难题解析(精校版)
- “面向对象就是一个错误!”
- 关于域用户的离线缓存登录知识分享
- PostgreSQL在何处处理 sql查询之九
- 树莓派3B创建WiFi热点
- 【技术综述】一文道尽softmax loss及其变种
- Ajax结合json在web中的应用
- 纪中培训总结(2019年9月4~13日)
- Apache Cordova介绍
- Java 算法 开心的金明
- Python的lambda函数
- php imagedashedline,如何用php作线形图的函数
- CKeditor4.7.3标准版图片上传及相关配置
- 批量生成PDF417码
- 琴生Jensen不等式,条件期望
- 幼儿园门口摆个考勤机 家长接孩子得打卡
- 使用命令行连接MySQL数据库
- linux修改时间和日期,linux修改时间和日期的方法
- 月均GMV超1500万,“组合营销”如何成为快手品牌出圈利器?
- 各大互联网软件公司校招时间表大盘点
热门文章
- DARPA:我们需要一种新型的芯片技术来确保人工智能的长足发展
- 为何程序员们没事总爱戴个耳机,看完恍然大悟......
- 一条推文卖出 290 万美元天价?网友:我竟是隐藏的富翁
- 不是“老赖”是“真还”!罗永浩 6 亿债务还了 4 亿
- DTU详解解读 概念到功能应用
- 京东网络开放之路——自研交换机探索与实践
- 系统高可用设计与实践
- linux下如何让程序无法重复启动
- Python 设计模式: 单例模式(singleton pattern)
- [20170420]关于延迟块清除3.txt