put(key, value);
}
return value;
}
private boolean removeCache(Integer historyCount) {
return historyCount >= putStandard;
}
public void setPutStandard(int putStandard) {
this.putStandard = putStandard;
}
@Override
public void setCallback(Callback<K, V> callback) {
super.setCallback(callback);
}
public void setHistoryListCallback(Callback<K, V> callback) {
historyList.setCallback((Callback<Object, Integer>) callback);
}
}
LRU-K能降低缓存污染发生的概率,但是需要额外记录对象访问次数,内存消耗较大。
测试
class LRUCacheTest {
@Test
void lru(){
CacheStrategy<Integer, Integer> lruCache = new LRUCache<>(5);
lruCache.setCallback((integer, integer2) -> System.out.println("淘汰"+integer+"="+integer2));
lruCache.put(1,1);
lruCache.put(2,2);
lruCache.put(3,3);
lruCache.put(4,4);
lruCache.put(5,5);
lruCache.put(6,6);
List list = lruCache.list();
System.out.println(list);
}
}
淘汰1=1
[2=2, 3=3, 4=4, 5=5, 6=6]
class LRUKCacheTest {
@Test
void lrukCacheTest() {
LRUKCache<Integer, Integer> lrukCache = new LRUKCache<>(2,3,1);
lrukCache.setHistoryListCallback((integer, integer2) -> System.out.println("记录队列淘汰"+integer+"="+integer2));
lrukCache.setCallback((integer, integer2) -> System.out.println("缓存淘汰"+integer+"="+integer2));
lrukCache.get(1);
lrukCache.get(1);
lrukCache.get(1);
lrukCache.get(2);
lrukCache.get(2);
lrukCache.get(2);
lrukCache.get(3);
lrukCache.get(3);
lrukCache.get(3);
lrukCache.get(4);
lrukCache.get(4);
lrukCache.get(4);
lrukCache.put(1,2);
lrukCache.put(2,2);
lrukCache.put(3,2);
lrukCache.put(4,2);
List list = lrukCache.list();
System.out.println(list);
}
}
记录队列淘汰1=3
缓存淘汰2=2
[3=2, 4=2]