首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java 理论概念·LRU 缓存淘汰算法

LRU 缓存淘汰算法 本文为个人学习摘要笔记。...原文地址:聊聊缓存淘汰算法-LRU 实现原理 我们常用缓存提升数据查询速度,由于缓存容量有限,当缓存容量到达上限,就需要删除部分数据挪出空间,这样新数据才可以添加进来。...缓存数据不能随机删除,一般情况下我们需要根据某种算法删除缓存数据。常用淘汰算法有 LRU,LFU,FIFO,本文说明 LRU 算法。...这里总结一下 LRU 算法具体步骤: 新数据直接插入到列表头部 缓存数据被命中,将数据移动到列表头部 缓存已满的时候,移除列表尾部数据。...LRU 算法劣势在于对于偶发的批量操作,比如说批量查询历史数据,就有可能使缓存中热门数据被这些历史数据替换,造成缓存污染,导致缓存命中率下降,减慢了正常数据查询。

47530
您找到你想要的搜索结果了吗?
是的
没有找到

LRU缓存机制

JavaScript实现LeetCode第146题:LRU缓存机制[1] 题目描述 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制[2]。...解题步骤: 使用Map记录缓存值,使用链表记录缓存操作顺序,最后操作的缓存放在链表头部,链表尾部就是最少操作的缓存 读取缓存时,更新缓存操作顺序,将缓存节点从链表中移除, 再将其添加到链表头部, 移除节点时要保证链表的连续性...,为了在 O(1)时间完成该操作,需要使用双向链表 设置缓存时 如果是已存在的缓存,则直接更新缓存值即可,并更新缓存操作的顺序; 如果是不存在的缓存,则将缓存加到链表头部, 添加后如果缓存超出上限, 则将链表尾部的缓存清掉...参考资料 [1]LRU缓存机制: https://leetcode-cn.com/problems/lru-cache/ [2]LRU (最近最少使用) 缓存机制: https://baike.baidu.com.../item/LRU [3]官方题解: https://leetcode-cn.com/problems/lru-cache/solution/lru-huan-cun-ji-zhi-by-leetcode

1K40

System|缓存|Rethinking LRU

LRU是常见的缓存淘汰策略,用于分布式系统的缓存、页表置换等场景。然而,经典的哈希链表实现事实上并不是很好的实现策略。...本文将从内存页、CPU缓存、分布式缓存等几个方面介绍它们所使用的LRU算法实现。...绝对的LRU并不适合工程实践,一般工业界使用LRU的近似算法。思路在于: 我们并不一定要淘汰最早访问的缓存,只要淘汰相对最早访问的缓存即可。...2Q(Two Queue) BlueStore的缓存策略,基于FIFO+LRU双队列实现,个人感觉不如Linux巧妙,这里的插入是实时+单向的。...同样地,因为采用了惰性,这种算法显然不是绝对的LRU,具体参照这篇文章 ---- CPU缓存淘汰 对于硬件级别的缓存而言,每个缓存行的block数目固定且规模有限,因此不需要复杂机制也能判断,直接运用bit

58410

详解LRU缓存算法

本文介绍一种简单的缓存策略,称为最近最少使用(LRU,Least Recently Used)算法。 二、LRU的实现 我们以内存访问为例解释缓存的工作原理。假设缓存的大小固定,初始状态为空。...向缓存添加数据时,如果缓存已满,则需要删除访问时间最早的那条数据,这种更新缓存的方法就叫做LRU。...实现LRU时,我们需要关注它的读性能和写性能,理想的LRU应该可以在O(1)的时间内读取一条数据或更新一条数据,也就是说读写的时间复杂度都是O(1)。...值得一提的是,Java API中其实已经有数据类型提供了我们需要的功能,就是LinkedHashMap这个类。该类内部也是采用HashMap+双向链表实现的。使用这个类实现LRU就简练多了。 ? ?...LRU Cache这道题,尝试一下如何实现这个算法。

56020

Leetcode LRU 缓存机制

前言 缓存是一种提高数据读取性能的技术,在计算机中cpu和主内存之间读取数据存在差异,CPU和主内存之间有CPU缓存,而且在内存和硬盘有内存缓存。...当主存容量远大于CPU缓存,或磁盘容量远大于主存时,哪些数据应该被应该被清理,哪些数据应该被保留,这就需要缓存淘汰策略来决定。...LRU描述 设计和实现一个 LRU (最近最少使用) 缓存机制 。...实现 LRUCache 类: LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,...当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。 解题思路 哈希表 + 双向链表 针对LRU的特点,选择使用双链表实现。

25410

详解LRU缓存算法

本文介绍一种简单的缓存策略,称为最近最少使用(LRU,Least Recently Used)算法。 二、LRU的实现 我们以内存访问为例解释缓存的工作原理。假设缓存的大小固定,初始状态为空。...向缓存添加数据时,如果缓存已满,则需要删除访问时间最早的那条数据,这种更新缓存的方法就叫做LRU。...实现LRU时,我们需要关注它的读性能和写性能,理想的LRU应该可以在O(1)的时间内读取一条数据或更新一条数据,也就是说读写的时间复杂度都是O(1)。...值得一提的是,Java API中其实已经有数据类型提供了我们需要的功能,就是LinkedHashMap这个类。该类内部也是采用HashMap+双向链表实现的。使用这个类实现LRU就简练多了。...LRU Cache这道题,尝试一下如何实现这个算法。

51230

Java和Android的LRU缓存及实现原理

一、概述 Android提供了LRUCache类,可以方便的使用它来实现LRU算法的缓存。...Java提供了LinkedHashMap,可以用该类很方便的实现LRU算法,Java的LRULinkedHashMap就是直接继承了LinkedHashMap,进行了极少的改动后就可以实现LRU算法。...二、JavaLRU算法 JavaLRU算法的基础是LinkedHashMap,LinkedHashMap继承了HashMap,并且在HashMap的基础上进行了一定的改动,以实现LRU算法。...Java的removeEldestEntry方法,也可以达到同样的效果。Java需要使用者自己提供整个判断的过程,两者思路还是有些区别的。...sizeOf,safeSizeOf不需要说明,而put和get方法,虽然和Java的实现方式不完全一样,但是思路是相同的,也不需要分析。

86910

LeetCode:146_LRU cache | LRU缓存设计 | Hard

题目:LRU cache Design and implement a data structure for Least Recently Used (LRU) cache....LRU是一种应用在操作系统上的缓存替换策略,和我们常见的FIFO算法一样,都是用于操作系统中内存管理中的页面替换,其全称叫做Least Recently Used(近期最少使用算法),算法主要是根据数据的历史访问记录来进行数据的淘汰...LRU算法设计 数据结构的选择:因为涉及到数据元素的查找,删除,替换,移动等操作,所以我们选择列表来进行数据的存储,为了考虑时间复杂度,我们分析一下,单链表插入删除操作的时间复杂度为O(n),双链表为O...为了能够比较形象的了解LRU的执行过程,我们举一个例子,如下: 假定现有一进程的页面访问序列为: 4,7,0,7,1,0,1,2,1,2,6 缓存容量为5,则随着进程的访问,缓存栈中页面号的变化情况如下图所示...在算法实现时,我们可以把最近最久没有使用的数据放在链表的最后,当缓存空间满时(即发生缺页),直接将最后一个数据淘汰即可,同时,如果一个数据发生命中,或者新来一个数据,我们都将该数据移到链表的头部,这样就能保证在链表头部的数据都是最近访问过的

58090

LRU 缓存机制

什么是LRU?...很多时候尤其以前内存比较值钱的时候,我们空间比较宝贵,不会很大,那么就存在了重点数据和非重点数据,我们要在内存不够的时候有限保存重点数据淘汰非重点数据;LRU也就是说我们认为最近使用过的数据应该是重点数据...1.手机上划显示的任务列表,都是按照最近打开顺序排列的 2.redis的lru淘汰策略 思路: 1.利用linkedhashmap实现lru,因为其本身就存在lru策略,只需要使用即可,这部分代码放最下面...2.自己写lru 手写LRU算法思路: 关注LRU算法需要什么?...要能做到快速增加快速查找,以及数据根据访问顺序淘汰 那么这里就想到用Map保障数据的随机访问速度,用双链表保障数据的快速增加 如下代码,我们定义了双链表的结点以及双链表的重要操作(都是我们做数据新增和删除需要的数据) 手写LRU

19210

LRU缓存机制

运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。...获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。 写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。...当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。 进阶: 你是否可以在 O(1) 时间复杂度内完成这两种操作?...获取数据的时候: 如果密钥存在于缓存中,那么返回缓存的value值,同时在列表中将该节点删除并且插入到链表的最前端; 如果密钥不存在于缓存中,返回-1。...写入数据的时候: 如果密钥存在,在链表中将该结点删除并插入到最前端; 如果密钥不存在,如果缓存容量达到上限删除链表的最后一个元素,然后将该节点插入到链表的最前端;哈希表中插入该元素。

27110

手写LRU缓存淘汰算法

那怎么办,技术的产生不就是我们所服务么,今天我们就聊一聊缓存这个技术,并使用我们熟知的数据结构--用链表实现LRU缓存淘汰算法。...在学习如何使用链表实现LRU缓存淘汰算法前,我们先提出几个问题,大家好好思考下,问题如下: 什么是缓存缓存的作用? 缓存的淘汰策略有哪些?...如何使用链表实现LRU缓存淘汰算法,有什么特点,如何优化? 好了,我们带着上面的问题来学进行下面的学习。 1、什么是缓存缓存的作用是什么?...在上面的文章中我们理解了缓存的概念及淘汰策略,其中LRU算法是笔试/面试中考察比较频繁的,我秋招的时候,很多公司都让我手写了这个算法,为了避免大家采坑,下面,我们就手写一个LRU缓存淘汰算法。...运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。

71010
领券