Cache4J--缓存策略

来源:互联网 发布:深圳快乐彩开奖数据 编辑:程序博客网 时间:2024/05/21 08:44

原文: http://blog.sina.com.cn/s/blog_48a45b950100f3ht.html

 

Cache4J目前支持三种缓存策略:FIFO、LFU和LRU,利用FIFOComparator、LFUComparator和LRUComparator这三个比较器进行实现。这三个实现了java.util.Comparator接口

Cache4J--缓存策略

利用该接口提供的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);

             }

}

 

原创粉丝点击