Cache4J--缓存策略

本文介绍了Cache4J支持的三种缓存策略:FIFO(先进先出)、LFU(最不常使用)和LRU(最近最少使用)。通过具体的Java代码示例展示了如何实现这些策略,包括基于创建时间、访问次数及最后访问时间的缓存对象比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

             }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值