redis缓存淘汰策略-LRU算法(最近最少使用)
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,
选择最近最久未使用的数据予以淘汰。
1,所谓缓存,
必须要有读+写两个操作,按照命中率的思路考虑,写操作+读操作时间复杂度都需要为O(1)
2,特性要求
2.1必须要有顺序之分,一区分最近使用的和很久没有使用的数据排序。2.2写和读操作一次搞定。
2.3如果容量(坑位)满了要删除最不长用的数据,每次新访问还要把新的数据插入到队头(按照业务你自己设定左右那一边是队头)
查找快、插入快、鹏除快,且还需要先后排序...…>什么样的数据结构可以满足这个问题?
你是否可以在O(1)时间复杂度内完成这两种操作?
如果一次就可以找到,你觉得什么数挑结构最合适??
基于LinkedHashMap实现LRU算法
代码
package lru;
import java.util.LinkedHashMap;
import java.util.Map;
public class LRUCacheDemo <k,v> extends LinkedHashMap<k,v> {
    private int capacity;
    /**
     *accessorder thc ordering modc
     <tt>true</tt> for access-order,
     <tt>false</tt> for insertion-order Cparom capacity
     **/
    public LRUCacheDemo(int capacity) {
        super(capacity,0.75F,true);
        this.capacity = capacity;
    }
    @Override
    protected boolean removeEldestEntry(Map.Entry<k, v> eldest) {
        return super.size()>capacity;
        //return super.removeEldestEntry(eldest);
    }
    public static void main(String[] args) {
        LRUCacheDemo lrucacheDemo = new LRUCacheDemo(3);
        lrucacheDemo.put(1,"a");
        lrucacheDemo.put(2,"b");
        lrucacheDemo.put(3,"c");
        System.out.println(lrucacheDemo.keySet()) ;
     //   lrucacheDemo.put(4,"d");
    }
}

当添加第四个数据进来,这时候就会将1挤出去,淘汰1

 
不知道前面有一行代码注意没有?

super(capacity,0.75F,false); // true改成了false




















![[OC学习笔记]启动流程](https://img-blog.csdnimg.cn/29d971ee750649b5aa9e8d537e5d7f20.png)