美文网首页
2018-11-11 LRU 算法一

2018-11-11 LRU 算法一

作者: 大妈_b059 | 来源:发表于2018-11-11 22:57 被阅读0次

LRU全称是Least Recently Used,即最近最久未使用的意思。

LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。

LRU目前有很多种实现,下面的是java中基于LinkedHashMap的一种实现。下面的实现是线程不安全的,如想要线程安全,只需在对应方法前加锁 即可。当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。

利用LinkedHashMap 实现lru,只需要重写removeEldestEntry()方法,即当缓存超过容量时,删除缓存。

具体代码如下:


package java算法;

import java.util.LinkedHashMap;

/**

*

* @author 刘慧丽

* LinkedHashMap实现LRU最近最久未访问算法

*

*    线程不安全,如若要线程安全则在需要的防范前加锁即可

* @param <K>

* @param <V>

*/

public class LRUCache<K, V> extends LinkedHashMap<K, V> {

//支持序列化

    private static final long serialVersionUID = 1L;



    //缓存大小

    private int cacheSize;

    //加载因子,0.75 表示当缓存到达四分之三时,开始扩容

    private static final float DEFAULT_LOAD_FACTOR = 0.75f;



public LRUCache(int cacheSize) {

//true accessOrder,ordering mode ,true 访问顺序排列,false插入顺序排列

super(cacheSize, DEFAULT_LOAD_FACTOR, true);

this.cacheSize=cacheSize;

}

//使用linkedHashMap 实现lru 时必须重写removeEldestEntry方法

@Override

protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {

//如果当前容量大于缓存容量,清空缓存

return size()>cacheSize;

}



public static void main(String[] args) {

LRUCache<Integer, String> lru = new LRUCache<>(4);

for(int i=0;i<4;i++) {

lru.put(i+1, "liuhuili"+i);

}

System.out.println("初始化缓存数据:"+lru.keySet());

lru.get(2);//访问二

//目前缓存顺序,最近访问的会放在队列末尾

System.out.println(lru.keySet());

//添加一个元素,此时容量超出,删除第一个元素

lru.put(5, "adbc");

System.out.println(lru.keySet());

}





}

运行结果:

初始化缓存数据:[1, 2, 3, 4]
[1, 3, 4, 2]
[3, 4, 2, 5]

相关文章

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

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

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

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

  • 缓存 -- LRU算法

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

  • 2018-11-11 LRU 算法一

    LRU全称是Least Recently Used,即最近最久未使用的意思。 LRU算法的设计原则是:如果一个数据...

  • 缓存相关

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

  • python内置缓存lru_cache

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

  • LRU Cache理解

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

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

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

  • Java LinkedHashMap 和 LRU算法

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

  • LruCache

    LruCache 一. LRU算法简介 ​ LRU算法,全称Least Rencetly Used,就是最近最...

网友评论

      本文标题:2018-11-11 LRU 算法一

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