专栏首页java干货LinkedHashMap实现简单的LRU缓存

LinkedHashMap实现简单的LRU缓存

缓存是计算机技术中一种非常有用的技术,是一个通用的提升数据访问性能的思路,一般用来保存常用的数据,容量较小,但访问更快,缓存是相对而言的,相对的是主存,主存的容量更大、但访问更慢。缓存的基本假设是,数据会被多次访问,一般访问数据时,都先从缓存中找,缓存中没有再从主存中找,找到后,再放入缓存,这样,下次如果再找相同数据,访问就快了。

一般而言,缓存容量有限,不能无限存储所有数据,如果缓存满了,当需要存储新数据时,就需要一定的策略将一些老的数据清理出去,这个策略一般称为替换算法。LRU是一种流行的替换算法,它的全称是Least Recently Used,最近最少使用,它的思路是,最近刚被使用的很快再次被用的可能性最高,而最久没被访问的很快再次被用的可能性最低,所以被优先清理。

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * Created by 11 on 2017/5/18.
 */
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
    private int maxEntries;

    public LRUCache(int maxEntries){
        super(16, 0.75f, true);
        this.maxEntries = maxEntries;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return size() > maxEntries;
    }
}

这个缓存可以这么用: public class Test {

public static void main(String[] args) {
    LRUCache<String,Object> cache = new LRUCache<>(3);
    cache.put("a", "abstract");
    cache.put("b", "basic");
    cache.put("c", "call");
    cache.get("a");

    cache.put("d", "call");
    System.out.println(cache);
	}
}

输出结果: {c=call, a=abstract, d=call}

参考链接:剖析LinkedHashMap

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何动手撸一个LRU缓存

    上篇文章介绍了,如何动手实现一个LFU缓存,今天我们来学习下如何动手实现一个LRU缓存,在这之前,我们还是先回顾下关于缓存置换算法的三种策略:

    我是攻城师
  • 动手实现 LRU 算法,以及 Caffeine 和 Redis 中的缓存淘汰策略

    那天我在 LeetCode 上刷到一道 LRU 缓存机制的问题,第 146 题,难度为中等,题目如下。

    古时的风筝
  • LinkedHashMap实现LRU - 附重点源码解析

    最近接触LRU(Least Recently Used),即最近最少使用,也称淘汰算法,在JDK中LinkedHashMap有相关实现,下面针对LRU及Link...

    夹胡碰
  • dubbo 缓存的使用和实现解析

    dubbo缓存主要实现,对方法调用结果的缓存。 在服务消费方和提供方都可以配置使用缓存。 以消费方为例,可以配置全局缓存策略,这样所有服务引用都启动缓存 ...

    技术蓝海
  • Android 内存缓存:手把手教你学会LrhCache算法

    当 accessOrder 参数设置为true时,存储顺序(遍历顺序) = 外部访问顺序

    Carson.Ho
  • Android缓存机制——LruCache的详解

    LruCache的核心原理就是对LinkedHashMap的有效利用,它的内部存在一个LinkedHashMap成员变量,值得注意的4个方法:构造方法、get、...

    砸漏
  • ​LeetCode刷题实战146:LRU 缓存机制

    https://leetcode-cn.com/problems/lru-cache/

    程序IT圈
  • What is LRU?

    LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率...

    用户3467126
  • lru算法和redis的lru

    LRU-K中的K代表最近使用的次数,因此LRU可以认为是LRU-1。LRU-K的主要目的是为了解决LRU算法“缓存污染”的问题,其核心思想是将“最近使用过1次”...

    earthchen
  • 手把手教你用LinkedHashMap打造FIFO和LRU缓存系统

    对于缓存来说,我相信很多人都不会陌生。一般的,对于常用的一些数据,基础数据等,也或者是为了高并发,比如抢购等把热点数据放入缓存中以实现高并发快速响应。

    业余草
  • 极客算法训练笔记(三),链表详细图解,别再逃避了朋友

    上一篇说的是数组,然后现在来说说链表。链表有个经典应用,就是实现LRU缓存淘汰算法,缓存的作用大家肯定都知道,常见的Redis缓存,CPU缓存,数据库缓存,浏览...

    阿甘的码路
  • 详解LRU缓存算法

    这里说的缓存是一种广义的概念,在计算机存储层次结构中,低一层的存储器都可以看做是高一层的缓存。比如Cache是内存的缓存,内存是硬盘的缓存,硬盘是网络的缓存等等...

    码农编程进阶笔记
  • LRU 算法

    LRU 是 Least Recently Used 的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访...

    haifeiWu
  • 算法题就像搭乐高:手把手带你拆解 LRU 算法

    LRU 算法就是一种缓存淘汰策略,原理不难,但是面试中写出没有 bug 的算法比较有技巧,需要对数据结构进行层层抽象和拆解,本文 labuladong 就给你写...

    labuladong
  • 手摸手写一个LRU算法

    经过我周密的百度之后, 得到了答案,原来就是 “Least Recently Used”的缩写,它的意思是最近最少使用。

    简单的程序员
  • Redis入门学习笔记一

    Redis 简要描述:   1.  Redis 是啥 ?        Redis 英文名称全称为: Remote Dictionary Server ,中译为...

    Gxjun
  • Java中常见数据结构Map之LinkedHashMap

    一枝花算不算浪漫
  • GuavaCache学习笔记一:自定义LRU算法的缓存实现

    今天在看GuavaCache缓存相关的源码,这里想到先自己手动实现一个LRU算法。于是乎便想到LinkedHashMap和LinkedList+HashMap,...

    一枝花算不算浪漫
  • JAVA面试题之四——Redis 中的缓存清空策略 LRU 说一下?

    ==LRU== 是一种缓存淘汰策略。常见的策略有三种:先进先出策略 FIFO(First In,First Out)、最少使用策略 LFU(Least Freq...

    prepared

扫码关注云+社区

领取腾讯云代金券