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相关推荐

  1. 计组之存储系统:7、Cache替换算法(随机算法RAND、先进先出算法FIFO、近期最少使用LRU、最近不经常使用LFU)

    7.Cache替换算法 思维导图 存在的问题 替换算法解决的问题 Cache替换算法 随机算法(RAND) 先进先出算法(FIFO) 近期最少使用(LRU) 最近不经常使用(LFU) 思维导图 存在的 ...

  2. java 最少使用(lru)置换算法_「Redis源码分析」Redis中的LRU算法实现

    如果对我的文章感兴趣.希望阅读完可以得到你的一个[三连],这将是对我最大的鼓励和支持. LRU是什么 LRU(least recently used)是一种缓存置换算法.即在缓存有限的情况下,如果有新 ...

  3. 最近最少使用LRU(Least Recently Used)算法java实现

    最近最少使用LRU(Least Recently Used)算法java实现 一.使用LinkedHashMap算法实现 二.手撸 LRU 算法实现(Hash表 + 双向链表) 三.总结 最近最少使用 ...

  4. java 最少使用(lru)置换算法_一篇文章学会如何基于LRU-K算法设计本地缓存实现流量削峰...

    专注于Java领域优质技术号,欢迎关注 作者:一个Java菜鸟 1.背景介绍 1.1.现象 QPS突然增长2倍以上(45w~60w每分钟) 将产生下面一些问题: 1)响应接口响应时长增加了5倍(qps ...

  5. java 最少使用(lru)置换算法_[内附完整源码和文档] 基于C#的可视化虚拟存储器管理(LUR算法)...

    一.目的要求 理解虚拟存储器概念,并掌握分页式存储管理地址转换和缺页中断的处理过程.用高级语言模拟请求分页式虚拟存储器的工作过程和页面置换算法LRU. 二.准备知识 2.1 分页式存储管理原理 在存储 ...

  6. lru算法实现 redis_Redis中的lru算法实现

    lru是什么 lru(least recently used)是一种缓存置换算法.即在缓存有限的情况下,如果有新的数据需要加载进缓存,则需要将最不可能被继续访问的缓存剔除掉.因为缓存是否可能被访问到没 ...

  7. LRU算法思想及手写LRU实现

    文章目录 LRU思路及实现代码 思想 方案一.数组 思路 问题 方案二.链表 思路 问题 方案三.双向链表+哈希表 思路 为什么这里要用双链表呢,单链表为什么不行? 哈希表里面已经保存了 key ,那 ...

  8. java 最少使用(lru)置换算法_「面试」LRU了解么?看看LinkedHashMap如何实现LRU算法...

    以下内容均是本人原创,希望你看完之后能有更多更深入的了解,欢迎关注➕ 问题:使用Java完成一个简单的LRU算法 什么是LRU算法 LRU(Least Recently Used),也就是最近最少使用 ...

  9. java 最少使用(lru)置换算法_缓存置换算法 - LRU算法

    LRU算法 1 原理 对于在内存中并且不被使用的数据块就是LRU,这类数据需要从内存中删除,以腾出空间来存储常用的数据. LRU算法(Least Recently Used,最近最少使用),是内存管理 ...

最新文章

  1. 数据结构题及c语言版答案9.14,十套数据结构试题+答案+难题解析(精校版)
  2. “面向对象就是一个错误!”
  3. 关于域用户的离线缓存登录知识分享
  4. PostgreSQL在何处处理 sql查询之九
  5. 树莓派3B创建WiFi热点
  6. 【技术综述】一文道尽softmax loss及其变种
  7. Ajax结合json在web中的应用
  8. 纪中培训总结(2019年9月4~13日)
  9. Apache Cordova介绍
  10. Java 算法 开心的金明
  11. Python的lambda函数
  12. php imagedashedline,如何用php作线形图的函数
  13. CKeditor4.7.3标准版图片上传及相关配置
  14. 批量生成PDF417码
  15. 琴生Jensen不等式,条件期望
  16. 幼儿园门口摆个考勤机 家长接孩子得打卡
  17. 使用命令行连接MySQL数据库
  18. linux修改时间和日期,linux修改时间和日期的方法
  19. 月均GMV超1500万,“组合营销”如何成为快手品牌出圈利器?
  20. 各大互联网软件公司校招时间表大盘点

热门文章

  1. DARPA:我们需要一种新型的芯片技术来确保人工智能的长足发展
  2. 为何程序员们没事总爱戴个耳机,看完恍然大悟......
  3. 一条推文卖出 290 万美元天价?网友:我竟是隐藏的富翁
  4. 不是“老赖”是“真还”!罗永浩 6 亿债务还了 4 亿
  5. DTU详解解读 概念到功能应用
  6. 京东网络开放之路——自研交换机探索与实践
  7. 系统高可用设计与实践
  8. linux下如何让程序无法重复启动
  9. Python 设计模式: 单例模式(singleton pattern)
  10. [20170420]关于延迟块清除3.txt