常用缓存提升数据查询速度,由于缓存容量有限,当缓存容量到达上限,就需要删除部分数据挪出空间,这样新数据才可以添加进来。缓存数据不能随机删除,一般情况下我们需要根据某种算法删除缓存数据。常用淘汰算法有 LRU,LFU,FIFO。这篇文章我们聊聊 LRU 算法。

一、LRU 简介

LRU 是( Least Recently Used) 的缩写,这种算法认为最近使用的数据是热门数据,下一次很大概率将会再次被使用。而最近很少被使用的数据,很大概率下一次不再用到。当缓存容量的满时候,优先淘汰最近很少使用的数据。其在Redis、Guava等工具中也有非常广泛的应用,甚至是最核心的思想之一。

假设现在缓存内部数据如图所示:

这里我们将列表第一个节点称为头结点,最后一个节点为尾结点。

当调用缓存获取 key=1 的数据,LRU算法需要将 1 这个节点移动到头结点,其余节点不变,如图所示。

面试官:你知道 LRU算法 —— 缓存淘汰算法吗?相关推荐

  1. 用 js 实现 FIFO, LRU, LFU 缓存淘汰算法

    看了网上一些人写的缓存淘汰算法,大概明白了这三种淘汰算法的实现思路,然后自己在对这些算法的理解基础上用js语言实现如下 1. FIFO 先入先出 这个相对比较简单,使用一个数组存储,在没到达最大存储空 ...

  2. 数据结构与算法 / LRU 缓存淘汰算法

    一.诞生原因 缓存是一种提供数据读取性能的技术,在硬件设计.软件开发中有广泛的应用,比如常见的 CPU 缓存,DB 缓存和浏览器缓存等.但是缓存的大小是有限的,需要一定的机制判断哪些数据需要淘汰,即: ...

  3. 看动画轻松理解「链表」实现「LRU缓存淘汰算法」

    作者 | 程序员小吴,哈工大学渣,目前正在学算法,开源项目 「 LeetCodeAnimation 」5500star,GitHub Trending 榜连续一月第一. 本文为 AI科技大本营投稿文章 ...

  4. 算法必知 --- LRU缓存淘汰算法

    作者:_code_x 链接:https://www.jianshu.com/p/b7fed77324b9 写在前 就是一种缓存淘汰策略. 计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾 ...

  5. 06 | 链表(上):如何实现LRU缓存淘汰算法?

    缓存 作用 缓存是一种提高数据读取性能的技术,在硬件设计.软件开发中都有着非常广泛的应用,比如常见的 CPU 缓存.数据库缓存.浏览器缓存等等. 淘汰策略 常见的策略有三种:先进先出策略 FIFO(F ...

  6. mysql缓存淘汰机制_聊聊缓存淘汰算法-LRU 实现原理

    前言 我们常用缓存提升数据查询速度,由于缓存容量有限,当缓存容量到达上限,就需要删除部分数据挪出空间,这样新数据才可以添加进来.缓存数据不能随机删除,一般情况下我们需要根据某种算法删除缓存数据.常用淘 ...

  7. leetcode刷题:LRU缓存淘汰算法

    题目: 分析: 计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置.但问题是,删除哪些内容呢?我们肯定希望删掉哪些没什么用的缓存,而把有用的数据继续留在缓存里,方便之后继续使用.那么, ...

  8. 看动画轻松理解「链表」实现「 LRU 缓存淘汰算法」

    作者 | 吴至波 责编 | 胡巍巍 快速挑战Python全栈工程师: https://edu.csdn.net/topic/python115?utm_source=csdn_bw 前几节学习了「链表 ...

  9. 缓存淘汰算法--LRU算法

    缓存淘汰算法--LRU算法 参考: https://www.cnblogs.com/dailidong/p/7571178.html https://blog.csdn.net/wangxilong1 ...

最新文章

  1. Exchange Server2013 系列十:证书的配置
  2. linux automake-1.16 编译错误 Try `--no-discard-stderr' if option outputs to stderr
  3. 详记一次MySQL千万级大表优化过程!
  4. matlab模拟gpd,如何用ARMA模型预测中国GDP
  5. Dataset:数据生成之利用pandas自定义生成随机各自类型(离散型和连续型)的dataframe数据
  6. C++判断exe是32位还是64位
  7. anaconda使用记录
  8. 二叉树和为某种所有路径
  9. oracle 同义词_Oracle迁移到MySQL,必须要搞明白这几个问题
  10. 青蛙的约会(POJ-1061)
  11. ResNet网络总结
  12. CSS 框模型( Box module )
  13. 如何解密网易ncm/qq音乐的qmcflac/酷狗kgm等加密格式转换成MP3
  14. 嵌入式Linux学习笔记
  15. Java代码校验银行卡号
  16. NET 常见网络命令
  17. 重新定义软件定义安全
  18. python 实例解析--村长选举
  19. 湖北省重点研发计划项目(大健康领域支持地方专项)奖励支持政策,2022年申报条件及流程
  20. React之官网首页篇

热门文章

  1. Object类及Objects类
  2. 天龙八部之---看虚竹一生
  3. [Linux] Samba服务器配置 安全级别为share
  4. MySQL8.0 索引
  5. 震撼你的思维:老外是怎么跟我们做生意的(上)
  6. No qualifying bean of type ‘org.springframework.boot.autoconfigure.http.HttpMessageConverters‘
  7. python计算一元二次方程的根
  8. (附源码 springboot足球运动员训练计划管理系统的设计与实现 毕业设计281444
  9. Win7中,文件夹有个小锁什么意思??的解决
  10. 苹果商业广告--倡导绿色环保