详解工程师不可不会的LRU缓存淘汰算法
大家好 , 欢迎大家来到算法数据结构专题 , 今天我们和大家聊一个非常常用的算法 , 叫做LRU 。
LRU的英文全称是Least Recently Used , 也即最不经常使用 。 我们看着好像挺迷糊的 , 其实这个含义要结合缓存一起使用 。 对于工程而言 , 缓存是非常非常重要的机制 , 尤其是在当下的互联网应用环境当中 , 起到的作用非常重要 。 为了便于大家更好地理解 , 我们从缓存的机制开始说起 。
缓存缓存的英文是cache , 最早其实指的是用于CPU和主存数据交互的 。 早年这块存储被称为高速缓存 , 最近已经听不到这个词了 , 不知道是不是淘汰了 。 因为缓存的读写速度要高于CPU低于主存 , 所以是用来过渡数据用的 。 CPU从缓存当中读取数据 , 主存的数据也会先加载到缓存当中来 , 之后再进入CPU 。
后来缓存有了更多的应用和意为 , 在后端服务当中一般用来快速响应请求 。 其实这里的思想和记忆化搜索有点像 , 我们把可能要用到的数据先存起来 , 后期如果要用到的话 , 就可以直接从内存当中读取而不是再去计算一遍了 。 原理也是一样的 , 有了缓存我们可以把要返回给用户的数据储存在内存中 , 当同样的请求过来的时候 , 我们就可以直接从内存当中读取结果 , 而不是再走一次链路获取数据了 。
举一个很简单的例子 , 比如说我们打开淘宝首页会看到很多商品的推荐 。 其实推荐商品的流程是非常复杂的 , 首先要根据一定的策略去商品库当中召回商品 。 比如根据用户之前的行为召回和历史行为相关的商品 , 召回了商品之后还要进行清洗 , 过滤掉一些明确不感兴趣或者是非法、违规的商品 。 过滤了之后需要使用机器学习或者是深度学习的模型来进行点击率预测 , 从而将发生点击可能性最高的商品排在前面 。
到这里还没结束 , 推荐商品列表其实也是分展位的 , 有些位置的商品是运营配好的 , 有些位置固定展示的是广告 。 广告往往也有自己的一条链路 , 还有些位置有一些其他的逻辑 。 这些商品的数据都拿到了之后 , 还要获取图片以及其他一些零零散散的信息 , 最后才能展示出来 。 因此大家可以试一下打开淘宝首页要比打开百度首页慢得多 , 这并不是淘宝技术差 , 而是因为这中间的链路实在是太长了 。
文章插图
我们很容易发现 , 对于一些经常打开淘宝的用户来说 , 其实没有必要每一次都把完整的链路走一遍 。 我们大可以把之前展示的结果存储在内存里 , 下一次再遇到同样请求的时候 , 直接从内存当中读取并且返回就可以了 。 这样可以节省大量的时间以及计算资源 , 比如在大促的时候 , 就可以把计算资源节省下来用在更加需要的地方 。
【详解工程师不可不会的LRU缓存淘汰算法】缓存虽然好用 , 但是也不是万能的 , 因为内存是很贵的 , 我们不可能把所有数据都存在内存里 。 内存里只能放一些我们认为比较高价值的数据 , 在这种情况下 , 计算科学家们想出了种种策略来调度缓存 , 保持缓存当中数据的高价值 。 LRU就是其中一种比较常用的策略 。
LRU含义我们前面也说了 , LRU的意思是最长不经常使用 , 也可以理解成最久没有使用 。 在这种策略下我们用最近一次使用的时间来衡量一块内存的价值 , 越久之前使用的价值也就越低 , 最近刚刚使用过的 , 后面接着会用到的概率也就越大 , 那么自然也就价值越高 。
当然只有这个限制是不够的 , 我们前面也说了 , 由于内存是非常金贵的 , 导致我们可以存储在缓存当中的数据是有限的 。 比如说我们固定只能存储1w条 , 当内存满了之后 , 缓存每插入一条新数据 , 都要抛弃一条最长没有使用的旧数据 。 这样我们就保证了缓存当中的数据的价值都比较高 , 并且内存不会超过限制 。
- 雷军:2021年的第一件大事,给工程师发百万美金大奖
- 日本工程师:潘多拉魔盒被美国打开,中国办芯片大学只为打破禁令
- 性能翻倍!飞腾首款8核桌面处理器腾锐D2000详解
- 从工程师到“水果猎人”他在百度做科普
- 年代感十足!前苹果工程师放出初代iPhone生产线照片
- 能装进口袋的工程师运维笔记本:壹号本壹号工程师PC A1
- 布局AI药物研发!华为招聘药物研发算法工程师,早有准备进军医疗行业?
- 网速再翻倍,官方详解小米 11 搭载的 WiFi 6 增强版技术
- 腾讯数据工程师推荐的Python新手入门书籍,还是首发电子版
- 美国工程师:中国又一项技术刷新纪录!科技史上又一里程碑的存在