原文: 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);
}
}