LRU算法

作者: zombie11 | 来源:发表于2019-11-14 21:09 被阅读0次

前言

在看缓存的时候看到利用LinkedHashMap可以比较容易的实现LRU算法。

缓存

为了提高数据访问速度会使用到缓存,但是由于内存大小的限制,当存储的数据超过缓存容量的时候,需要对缓存的数据进行清理。一般缓存清理算法有FIFO淘汰最早数据、LRU剔除最近最少使用、和LFU剔除最近使用频率最低的数据几种。这里我们看看LRU算法。

LRU算法

LRU算法就是将最近最少用的缓存移除,让给最新使用的缓存。而往往最常读取的,也就是读取次数最多的,所以利用好LRU算法,我们能够提供对热点数据的缓存效率,能够提高缓存服务的内存使用率。

基于LinkedHashMap的实现

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

/**
 * 简单用LinkedHashMap来实现的LRU算法的缓存
 */
public class LRUCache<K, V> extends LinkedHashMap<K, V> {

    private int cacheSize;

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

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

基于LinkedHashMap实现看上去看是很简单的,那么问题来了为什么LinkedHashMap能实现这样的一个算法呢?

LinkedHashMap

LinkedHashMap是HashMap的一个子类,在HashMap的数据结构上加上了一个双向链表,也就在HashMap的基础上实现有序性。根据链表中元素的顺序可以分为:按插入顺序的链表,和按访问顺序(调用get方法)的链表。 当链表根据读取顺序时,每次被读取的数据会被挪动到尾端,那么表头就是最近最少使用的数据了,在数据超过缓存容量的时候表头数据移除掉就达到了LRU算法的目的了。

相关文章

  • Algorithm进阶计划 -- LRU 与 LFU 算法

    LRU 与 LFU 算法LRU 算法LFU 算法 1. LRU 算法 LRU 算法是一种缓存淘汰策略,是 Leas...

  • 缓存淘汰算法--LRU算法

    缓存淘汰算法--LRU算法 1. LRU 1.1 原理 LRU(Least recently used,)算法根据...

  • 缓存相关

    cache淘汰算法:LIRS 算法 缓存那些事 Redis缓存淘汰算法,LRU算法,LRU算法讲解

  • LRU Cache理解

    LRU Cache 1. 概念解析,LRU Cache算法 Lru Cache算法就是Least Recently...

  • 缓存 -- LRU算法

    什么是LRU算法 LRU算法的全称Least Recently Used。即最近最少使用。LRU算法是内存管理的一...

  • 高级算法

    请你讲讲LRU算法的实现原理? 考察点:LRU算法参考回答: ①LRU(Least recently used,最...

  • python内置缓存lru_cache

    lru_cache LRU算法原理 LRU (Least Recently Used,最近最少使用) 算法是一种缓...

  • LruCache原理和源码分析(一)

    一、Lru算法 Lru算法:最近最少使用算法; 算法的核心关键类是LinkedHashMap。 基本算法:将key...

  • Java LinkedHashMap 和 LRU算法

    问题:使用Java完成一个简单的LRU算法 什么是LRU算法 LRU(Least Recently Used),也...

  • LRU 算法实现

    LRU 算法实现 什么是 LRU 算法 LRU是什么?按照英文的直接原义就是Least Recently Used...

网友评论

      本文标题:LRU算法

      本文链接:https://www.haomeiwen.com/subject/zyedictx.html