Ehcache框架简单使用

内容逐渐添加中....

1. Ehcache框架使用需要的jar包有:ehcache-1.6.2jar,将其导入项目即可


2. 简单使用步骤:

2.1 首先在cache.xml中进行简单配置

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
<diskStore path="D:/Logs/" />
<defaultCache   
  maxElementsInMemory="500"   
  eternal="false"   
  timeToIdleSeconds="300"   
  timeToLiveSeconds="1200"   
  overflowToDisk="true" />   
    <cache name="testCache1" maxElementsInMemory="150" eternal="false" timeToLiveSeconds="36000" timeToIdleSeconds="3600" overflowToDisk="true"/>   
</ehcache>


2.2 其次使用EhcacheUtil类进行简单的put和get操作

package com.csl.nnn.common;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;

public class EhcacheUtil {
	 private static final String path = "D:/Logs/cache.xml";  
	    private CacheManager manager;  
	  
	    private static EhcacheUtil ehCache;  
	  
	    private EhcacheUtil(String path) {  
	        manager = CacheManager.create(path);  
	    }  
	  
	    public static EhcacheUtil getInstance() {  
	        if (ehCache== null) { 
	        	System.out.println("is null");
	            ehCache= new EhcacheUtil(path);  
	        }  
	        return ehCache;  
	    }  
	  
	    public void put(String cacheName, String key, Object value) {  
	        Cache cache = manager.getCache(cacheName);
	        System.out.println("key and value:"+key+":"+value);
	        if (cache==null){
	        	System.out.println("cache is null");
	        	cache=new Cache(cacheName,10000000,true,false,0,0);
	        	/**
	        	 * 2->允许内存中缓存对象大小
	        	 * 3->允许内存达到最大后写入磁盘 true
	        	 * 4->永久存储 true
	        	 * 5、6->element存活时间无穷大 0,0
	        	 */
	        }
	        Element element = new Element(key,value);
	        System.out.println("element:"+element.toString());
	        cache.put(element);  
	    }  
	  
	    public Object get(String cacheName, String key) {  
	        Cache cache = manager.getCache(cacheName);  
	        Element element = cache.get(key);  
	        return element == null?null:element.getObjectValue();  
	    }  
	  
	    public Cache get(String cacheName) {  
	        return manager.getCache(cacheName);  
	    }  
	  
	    public void remove(String cacheName, String key) {  
	        Cache cache = manager.getCache(cacheName);  
	        cache.remove(key);  
	    }  
}


2.3 简单的test demo

package com.csl.nnn.common;

import net.sf.ehcache.Cache;  
import net.sf.ehcache.CacheManager;  
import net.sf.ehcache.Element; 

public class TestECache {
	public static void main(String[] argStrings){
		//创建cache
		/* String fileName="D:/Logs/cache.xml";
		 CacheManager manager = CacheManager.create(fileName);  
		 Cache cache = new Cache("test", 1, true, false, 5, 2);  
		 manager.addCache(cache);  
		 Element element = new Element("key1", "value1");  
		 cache.put(element);  */
		EhcacheUtil.getInstance().put("testCache1", "mtest1", "mcontent1");
		EhcacheUtil.getInstance().put("testCache1", "mtest2", "mcontent2");
		
		
		String value=EhcacheUtil.getInstance().get("testCache1", "mtest2").toString();
		System.out.println("value:"+value);
		
	}
}

要注意的是,put方法的cacheName要和cache.xml中设置的cacheName一致,否则会报错Cahe is not alive.

另外cache.xml中一些参数:


diskStore :指定数据存储位置,可指定磁盘中的文件夹位置
defaultCache : 默认的管理策略
以下属性是必须的:
name: Cache的名称,必须是唯一的(ehcache会把这个cache放到HashMap里)。
maxElementsInMemory: 在内存中缓存的element的最大数目。 
maxElementsOnDisk: 在磁盘上缓存的element的最大数目,默认值为0,表示不限制。 
eternal: 设定缓存的elements是否永远不过期。如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断。 
overflowToDisk: 如果内存中数据超过内存限制,是否要缓存到磁盘上。


以下属性是可选的: 
timeToIdleSeconds: 对象空闲时间,指对象在多长时间没有被访问就会失效。只对eternal为false的有效。默认值0,表示一直可以访问。
timeToLiveSeconds: 对象存活时间,指对象从创建到失效所需要的时间。只对eternal为false的有效。默认值0,表示一直可以访问。
diskPersistent: 是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。 
diskExpiryThreadIntervalSeconds: 对象检测线程运行时间间隔。标识对象状态的线程多长时间运行一次。 
diskSpoolBufferSizeMB: DiskStore使用的磁盘大小,默认值30MB。每个cache使用各自的DiskStore。 
memoryStoreEvictionPolicy: 如果内存中数据超过内存限制,向磁盘缓存时的策略。默认值LRU,可选FIFO、LFU。


缓存的3 种清空策略 :
FIFO ,first in first out (先进先出).
LFU , Less Frequently Used (最少使用).意思是一直以来最少被使用的。缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。
LRU ,Least Recently Used(最近最少使用). (ehcache 默认值).缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值