缓存一般存放的都是热点数据,而热点数据又是利用LRU(最近最久未用算法)对不断访问的数据筛选淘汰出来的。
出于对这个算法的好奇就查了下资料。
利用LinkedHashMap实现
package cn.sp.lru; import java.util.LinkedHashMap; import java.util.Map; /** * 缓存淘汰算法--LRU算法 * Created by 2YSP on 2019/2/23. */ public class LRU<K,V> { private static final float hashLoadFactory = 0.75f; private LinkedHashMap<K,V> map; private int cashSize; public LRU(int cashSize){ this.cashSize = cashSize; int capacity = (int)Math.ceil(cashSize/hashLoadFactory) + 1; // 创建一个按照访问顺序排序的LinkedHashMap map = new LinkedHashMap<K,V>(capacity,hashLoadFactory,true){ @Override protected boolean removeEldestEntry(Map.Entry<K, V> eldest) { // 当大小超过缓存大小时就移除最不常读取的数 return size() > LRU.this.cashSize; } }; } public synchronized V get(K key){ return map.get(key); } public synchronized void put(K key,V value){ map.put(key,value); } public synchronized void clear(){ map.clear(); } public synchronized int usedSize(){ return map.size(); } public void print(){ for(Map.Entry<K,V> entry : map.entrySet()){ System.out.print(entry.getValue() + "-"); } System.out.println(); } }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/13231.html