标签:exp eee 适应性 列表 缺点 ret after fir 1.2
原文地址: http://note.youdao.com/noteshare?id=1abbeb1deee85f0203001e9bc34f65b4
参考
对于缓存,常见淘汰算法有3:
FIFO
: first in first out,先进先出,即假定刚刚加入的数据总会被访问到;LRU
:least recently used,最近最少使用,判断最近被使用的时间,假定未被使用的时间越久就不可能在被使用;LFU
:least frequently used,数据使用次数最少的,优先被淘汰。对于FIFO算法,即caffeine
中的expireAfterWrite
方法,仅仅在数据插入时FIFO即可,LRU算法则在调用get()方法时再将数据重新插入即可。LFU
则将数据根据调用次数对数据进行排序。
LRU
不同版本介绍LRU
分为 LRU
、LRU-K(2)
、two queues(2q)
和multi queue(MQ)
四个版本。命中率、代价和复杂度对比如下:
对比项目 | 排序 |
---|---|
命中率 | LRU-2 > MQ > 2Q > LRU |
复杂度 | 同上 |
时空复杂度/代价 | 同上 |
LRU least recently used 最近最少使用。根据数据的访问历史淘汰数据,实现是建立在链表上的。新插入和被访问的节点放在表头,删除时从链尾开始。
least recently used 最近最少使用在存在热点数据时命中率高。但是缺点如下:
ConcurrentHashMap
的分段锁写入性能好;相比LRU,LRU-K需要维护一个访问历史队列,用于记录所有缓存数据被反问历史,只有数据被反问次数达到k时,才将数据放进缓存数据队列。
优缺点:
同样是两个队列-第一个队列使用FIFO算法。
性能:
2Q性能和命中率同LRU-2,但是 2Q会减少一次从原始存储读取数据或者计算数据的操作。
MQ算法根据数据访问频次将数据放进访问优先级不同的多个队列,访问时优先访问优先级比较高的队列。如图:
注意点:
linkedHashMap
因为java的单根继承,因此组合应该优于继承,便于扩展。
public class LruCache<K,V> implements Cache<K,V> {
private final Map<K,V> cache;
public LruCache(final int maxSize){
cache=new LinkedHashMap<K,V>(maxSize){
//返回值表示是否进行移除操作,此方法在节点插入操作中被调用,如putVal、compute、computeIfAbsent、merge
@Override
protected boolean removeEldestEntry(Map.Entry eldest) {
return this.size()>maxSize;
}
};
}
@Override
public V get(K key) {
return cache.get(key);
}
@Override
public void put(K key, V value) {
cache.put(key,value);
}
@Override
public boolean remove(K key) {
//remove返回之前与key绑定的value—如果不为null,表示移除的key对应的valu不为null;
// 为null,返回false表示没有与key对应的value
return cache.remove(key)!=null;
}
}
LinkedHashMap
重载removeEldestEntry
方法即可。想要线程安全则使用synchronized
修饰方法即可。
import java.util.LinkedHashMap;
import java.util.Map.Entry;
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
private static final long serialVersionUID = 1L;
protected int maxElements;
public LRUCache(final int maxSize) {
super(maxSize, 0.75F, true);
this.maxElements = maxSize;
}
/*
* 返回值表示是否进行数据移除
*/
@Override
protected boolean removeEldestEntry(Entry<K, V> eldest) {
return (size() > this.maxElements);
}
}
标签:exp eee 适应性 列表 缺点 ret after fir 1.2
原文地址:https://www.cnblogs.com/dugk/p/9742309.html