ehcache 缓存使用

 name:Cache的唯一标识
           maxElementsInMemory:内存中最大缓存对象数。
           maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大。
           eternal:Element是否永久有效,一但设置了,timeout将不起作用。
           overflowToDisk:配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中。
           timeToIdleSeconds:设置Element在失效前的允许闲置时间。仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
           timeToLiveSeconds:设置Element在失效前允许存活时间。最大时间介于创建时间和失效时间之间。仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大。
           diskPersistent:是否缓存虚拟机重启期数据。
           diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
           diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。

           memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache> 
 
    <diskStore path="java.io.tmpdir" /> 
     
    <defaultCache  
        maxElementsInMemory="10000"  
        eternal="false" 
        timeToIdleSeconds="120"  
        timeToLiveSeconds="120"  
        overflowToDisk="true" 
        diskPersistent="false"  
        diskExpiryThreadIntervalSeconds="120" 
        memoryStoreEvictionPolicy="LRU"  
    /> 
    <cache name="recommend"          
        maxElementsInMemory="10000"   
        maxElementsOnDisk="10000000"  
        eternal="false"   
        timeToIdleSeconds="1440"   
        diskPersistent="false"  
        timeToLiveSeconds="600"   
        overflowToDisk="false"  
        memoryStoreEvictionPolicy="LRU">
        <cacheEventListenerFactory class="com.jwzt.ehcache.NotNullCacheEventListenerFactory" />  
    </cache> 
    
    <cache name="video"          
        maxElementsInMemory="10000"   
        maxElementsOnDisk="10000000"  
        eternal="false"   
        timeToIdleSeconds="1440"   
        diskPersistent="false"  
        timeToLiveSeconds="7200"   
        overflowToDisk="false"  
        memoryStoreEvictionPolicy="LFU">
       <cacheEventListenerFactory class="com.jwzt.ehcache.NotNullCacheEventListenerFactory" /> 
    </cache>
 
</ehcache> 
import java.util.Properties;

import net.sf.ehcache.event.CacheEventListener;
import net.sf.ehcache.event.CacheEventListenerFactory;

public class NotNullCacheEventListenerFactory extends CacheEventListenerFactory {

	@Override
	public CacheEventListener createCacheEventListener(Properties arg0) {
		System.out.println("进入监听");
		// TODO Auto-generated method stub
		return NotNullCacheEventListener.INSTANCE;
	}
}
import org.apache.log4j.Logger;

import net.sf.ehcache.CacheException;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.Element;
import net.sf.ehcache.event.CacheEventListener;

public class NotNullCacheEventListener implements CacheEventListener {
	private static Logger logger = Logger.getLogger(NotNullCacheEventListener.class);
	
	public static final CacheEventListener INSTANCE = new NotNullCacheEventListener();

	public void notifyElementRemoved(Ehcache arg0, Element arg1)
		throws CacheException {
		// TODO Auto-generated method stub
		logger.info("通知元素移除"+arg1.getKey());

	}
	
	public void notifyElementPut(Ehcache arg0, Element arg1)
		throws CacheException {
		// TODO Auto-generated method stub
		logger.info("通知元素添加"+arg1.getKey());
		System.out.println("添加元素"+arg1.getKey());

	}
	
	public void notifyElementUpdated(Ehcache arg0, Element arg1)
		throws CacheException {
		// TODO Auto-generated method stub
		logger.info("通知元素修改"+arg1.getKey());

	}
	
	public void notifyElementEvicted(Ehcache arg0, Element arg1) {
		// TODO Auto-generated method stub
		logger.info("通知元素驱赶"+arg1.getKey());
	}

	public void notifyElementExpired(Ehcache arg0, Element arg1) {
		// TODO Auto-generated method stub
		logger.info("元素["+arg1.getKey()+"]到达有效时间,系统自动从缓存中清楚");

	}
	
	public void notifyRemoveAll(Ehcache arg0) {
		// TODO Auto-generated method stub
		logger.info("通知元素移除所有");
	}
	
	public void dispose() {
		// TODO Auto-generated method stub
		logger.info("处理,安排");
	}
	
	@Override  
    public Object clone() throws CloneNotSupportedException {  
        throw new CloneNotSupportedException("Singleton instance");  
    } 

}
import java.util.List;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;

public class Test {

    public static void main(String[] args) throws Exception {
        //CacheManager manager = new CacheManager("/ehcache1.xml");
        final CacheManager manager = CacheManager.create(Test.class.getResourceAsStream("ehcache1.xml"));
        
        
        Cache cache = manager.getCache("recommend");
        for (int i = 0; i < 6; i++) {
            Element e = new Element( i, "value" + i);
            cache.put(e);
        }

        List<Integer> keys = cache.getKeys();
        for (int key : keys) {
            System.out.println(key + "," + cache.get(key));
        }
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值