LRU算法

1 原理

对于在内存中并且不被使用的数据块就是LRU,这类数据需要从内存中删除,以腾出空间来存储常用的数据。

LRU算法(Least Recently Used,最近最少使用),是内存管理的一种页面置换算法,就是用来删除内存中不被使用的数据,腾出空间来把常用的数据存进去。

LRU算法的实现原理:把所有的缓存数据存入链表中,新插入的或被访问的数据存入链表头,如果链表满了,就把尾部的数据清除。如下图所示:

比如长度是5,缓存中的数据是:1,2,3,4,5

访问了2,那么缓存中的数据顺序变为:2,1,3,4,5

新插入了6,会变为:6,2,1,3,4

2 Java编码实现

2.1 基于linkedhashmap实现

linkedhashmap的底层实现是链表,使用linkedhashmap实现LRU算法的关键在于设置链表的长度,代码如下所示:

2.2 链表实现

可以自己维护一个链表,来实现LRU算法,但是这种方式的弊端是查询、插入的效率比较慢,代码实现如下所示:

2.3 链表+HashTable实现

解决自己维护链表,插入、查询慢的问题,可以使用链表+HashTable来实现LRU算法,代码如下所示:

LRU算法的演变

LRU-K算法

LRU算法的弊端是会产生“缓存污染”,比如周期性访问的数据。为了解决这个问题,我们引入LRU-K算法。举个例子,需要查询的数据特别频繁,我们从redis或者数据库中拉取数据比较慢可以放在jvm缓存中,如下图所示:

满足条件的数据放在LRU队列中,应用程序第一次拉取数据从LRU队列中来拿,如果没有再从历史队列中拿,如果还拿不到就从redis中拿,并把拿到的数据放入历史队列中,历史队列的数据满足一定条件就放入LRU队列中


作者:生命—在继续

原文:CSDN

java 最少使用(lru)置换算法_缓存置换算法 - LRU算法相关推荐

  1. java常见的hash算法_常见的哈希算法和用途

    写在前面 哈希算法经常会被用到,比如我们Go里面的map,Java的HashMap,目前最流行的缓存Redis都大量用到了哈希算法.它们支持把很多类型的数据进行哈希计算,我们实际使用的时候并不用考虑哈 ...

  2. java 寻路算法_游戏中的寻路算法解析

    游戏角色的自动寻路,已经是游戏中一个历史比较悠久的领域,较为成熟也有很多种实现.这里摘录一句后面所提的参考资料中的描述:"业内AI开发者中有一句话:"寻路已不是问题."我 ...

  3. ios笔试题算法_微软笔试题-Dijkstra算法

    Dijkstra算法是典型的算法.Dijkstra算法是很有代表性的算法.Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表的方式,这里均采用永久和临 ...

  4. k均值算法 二分k均值算法_如何获得K均值算法面试问题

    k均值算法 二分k均值算法 数据科学访谈 (Data Science Interviews) KMeans is one of the most common and important cluste ...

  5. 斗牛怎么玩法算法_游戏开发中的算法

    游戏技术这条路,可深可浅.你可以满足于完成GamePlay玩法层面的东西,你也可以满足于架构和框架设计层面的东西,你也可以醉心于了解某一游戏引擎带来的掌控感.但是,我们不该止步于此,止步与目前所见或所 ...

  6. 图像 异常检测算法_检测图像异常的算法

    图像 异常检测算法 Modern applications are generating enormous amounts of image data. And in the last years, ...

  7. 最小径集的算法_机器学习的利器——集成算法

    最近在打算法竞赛的时候用到了集成算法,效果还不错,索性就总结了一篇集成算法的文章,希望能帮到正在转行的数据分析师们. 集成算法核心思想 集成算法的核心思想是通过构建并结合多个学习器来完成学习任务,也就 ...

  8. 标签传播算法_复杂网络社区发现算法汇总

    社区发现 这篇文章汇总了一些常见的社区发现概念和算法,包括 Modularity Q Fast Unfolding(Louvain Algorithm) LPA SLPA KL算法 GN算法 社区: ...

  9. 图像重建算法_基于深度学习图像重建算法(DLIR)对CT图像质量和剂量优化的研究:体模实验...

    编者按:今年Joël Greffier博士等在European Radiology (IF 4.1)上发表了题为<Image quality and dose reduction opportu ...

最新文章

  1. Google148亿元收购Fitbit,抢占苹果、三星可穿戴设备市场地盘
  2. TestInside640-801 v11(神州testv11)题库视频讲解(全部上传完毕)
  3. iOS push新的调用方法
  4. onCreate源码分析
  5. SpringBoot入门系列: Spring Boot的测试
  6. featuretools,可自动构造机器学习特征的Python库
  7. linux xargs命令选项,使用xargs命令在Linux中执行多个操作 | MOS86
  8. python基础入门第0天
  9. Android 编程下 ListView 和 CheckBox 混合使用时的常见问题
  10. php+foreach+传值传值,php foreach 传值还是传引用
  11. python基础 - 字符串与列表的基本操作方法
  12. android 中tools命名空间的全解
  13. 小学生python游戏编程5----拼图游戏继
  14. android切换输入法工具类
  15. C语言 —— 合并两个有序数组
  16. 微服务容器化运维:微博容器运维平台DCP
  17. matlab符号计算实验心得,Matlab符号计算总结
  18. 学习java随堂练习-20220610
  19. 《23种设计模式之单例模式(4种实现)》
  20. 证明:不同特征值对应的特征向量线性无关

热门文章

  1. JQUERY的appendappendTo
  2. CRMEB页面说明这个是v3.0H5端的
  3. C语言循环求出2的10次幂,C语言求2的100次幂的结果.doc
  4. 火狐浏览器服务器意外响应,Firefox 火狐浏览器 83 发布,已修复任意代码执行漏洞...
  5. java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解
  6. 压缩比13为什么建议用92的油_92号和95号汽油,哪个更耐烧?车主:欢迎入坑
  7. 新手python爬虫代码_新手小白必看 Python爬虫学习路线全面指导
  8. 多模块的maven项目,执行 install/deploy 指令时,排除指定module
  9. MYSQL 常用 DDL
  10. 服务器的图片无法显示,服务器的图片无法显示