二.配置文件ehcache.xml
首先,我们需要一个配置文件ehcache.xml(名字可以改变),主要内容如下
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
</ehcache>
这是根节点的两个标签,我们配置的内容在这里面,主要介绍一下几个常用标签
1.diskStore
指定磁盘的存储路径
2.defaultCache
默认的cache配置,如果创建了一个没有指定属性的cache,那么将默认继承该配置
3.cache
cache的配置,在其中指定这个cache的属性
标签下有这些属性,
maxElementsInMemory:缓存最大的元素个数
eternal:默认为false,如果为true,则忽略timeToIdleSeconds和timeToLiveSeconds,cache中的元素不会过期
timeToIdleSeconds:表示一个元素所允许闲置的最大时间,也就是说一个元素在不被请求的情况下允许在缓存中待的最大时间。默认是0,表示不限制
timeToLiveSeconds:单位是秒,表示无论一个元素闲置与否,其允许在Cache中存在的最大时间。默认是0,表示不限制
overflowToDisk:默认为false,当内存里面的缓存已经达到预设的上限时是否允许将按驱除策略驱除的元素保存在磁盘上了,如果为false则表示元素不会到磁盘盘上,只会在内存中
maxElementsOnDisk:磁盘中最大的元素数量
diskExpiryThreadIntervalSeconds:
单位是秒,表示多久检查元素是否过期的线程多久运行一次,默认是
120
秒
memoryStoreEvictionPolicy:采用的驱除策略
copyOnWrite:默认为false。当设置为true时,读入缓存中的是该对象的一个备份
copyOnRead:默认为false。当设置为true时,从缓存中取出的时候是缓存中对象的一个备份
下面写个程序说明一下copyOnWrite和copyOnRead
CacheManager cm = new CacheManager();
Cache c1 = cm.getCache("cache1");// cache1的copyOnRead为true,copyOnWrite为true
Element e1 = new Element("e1", new Integer(1));
c1.put(e1);// 根据copyOnWrite,放入缓存中的是e1的拷贝对象
Element e11 = c1.get("e1");
System.out.println(e1 == e11);// false
Cache c2 = cm.getCache("cache2");// cache2的copyOnRead为true,copyOnWrite为false
Element e2 = new Element("e2", new Integer(1));
c2.put(e2);// 根据copyOnRead,从缓存中取出的是内存中对象拷贝对象
Element e22 = c2.get("e2");
System.out.println(e2 == e22);// false
Cache c3 = cm.getCache("cache3");// cache2的copyOnRead为false,copyOnWrite为true
Element e3 = new Element("e3", new Integer(1));
c3.put(e3);// 根据copyOnWrite,放入缓存中的是e1的拷贝对象
Element e33 = c2.get("e3");
System.out.println(e3 == e33);// false