原文: http://blog.sina.com.cn/s/blog_48a45b950100f3ht.html
Cache4J目前支援三種緩衝策略:FIFO、LFU和LRU,利用FIFOComparator、LFUComparator和LRUComparator這三個比較子進行實現。這三個實現了java.util.Comparator介面
利用該介面提供的compare方法對緩衝器中的緩衝對象進行比較、選擇和淘汰。可以通過實現Comparator介面來實現自訂的緩衝策略。
LRU - Least Recently Used, 沒有被使用時間最長的。
LFU - Least Frequenty Used, 一定時間段內使用次數最少的。
FIFO - First In First Out, 先進先出策略。
FIFOComparator:先進先出策略是根據緩衝對象的建立時間來比較的。
public class FIFOComparator implements Comparator {
public int compare(Object o1, Object o2) {
CacheObject co1 = (CacheObject)o1;
CacheObject co2 = (CacheObject)o2;
returnco1.getCreateTime()<co2.getCreateTime() ? -1:
co1.getCreateTime()==co2.getCreateTime() ?
(co1.getId()<co2.getId()?-1:(co1.getId()==co2.getId()?0:1)):1;
}
public boolean equals(Object obj) {
return obj==null ? false : (obj instanceof FIFOComparator);
}
}
LFUComparator:最近最不常用使用是根據總的訪問次數進行比較的。
public class LFUComparator implements Comparator {
public int compare(Object o1, Object o2) {
CacheObject co1 = (CacheObject)o1;
CacheObject co2 = (CacheObject)o2;
returnco1.getAccessCount()<co2.getAccessCount() ? -1 :
co1.getAccessCount()==co2.getAccessCount() ?
(co1.getId()<co2.getId()? -1:(co1.getId()==co2.getId()?0:1)):1;
}
public boolean equals(Object obj) {
return obj==null ? false : (obj instanceof LFUComparator);
}
}
LRUComparator:最近最少使用是根據上次訪問的時間進行比較的。
public class LRUComparator implements Comparator {
public int compare(Object o1, Object o2) {
CacheObject co1 = (CacheObject)o1;
CacheObject co2 = (CacheObject)o2;
returnco1.getLastAccessTime()<co2.getLastAccessTime() ? -1 :
co1.getLastAccessTime()==co2.getLastAccessTime() ?
(co1.getId()<co2.getId()?-1:(co1.getId()==co2.getId()?0:1)):1;
}
public boolean equals(Object obj) {
return obj==null ? false : (obj instanceof LRUComparator);
}
}