内容逐渐添加中....
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 默认值).缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。