ehcache可以单独使用也可以和hibernate、spring等一起使用。
本人今天单独使用,并做些测试,分享经验如下,
需要2个包,commons-logging.jar、ehcache-core-2.5.1.jar,最好使用ehcache的高版本,不然会配置文件的某些属性不可用,如maxElementsInMemory等。这个版本需要commons-logging.jar包。
先配置xml文件,必须要有defaultCache,代码类似如下,
<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.sf.net/ehcache.xsd"> <diskStore path="E:/mytemp" /> <defaultCache maxElementsInMemory="10000" eternal="false" overflowToDisk="true" timeToIdleSeconds="10" timeToLiveSeconds="20" diskPersistent="false" /> <cache name="requestCache" maxElementsInMemory="100000" eternal="false" overflowToDisk="false" timeToIdleSeconds="180" timeToLiveSeconds="180" diskPersistent="false" memoryStoreEvictionPolicy="LFU" /> <cache name="myCache" maxElementsInMemory="2" eternal="false" overflowToDisk="true" timeToIdleSeconds="180" timeToLiveSeconds="180" maxElementsOnDisk="0" diskPersistent="true" memoryStoreEvictionPolicy="LFU" /> </ehcache>
diskStore中的 是硬盘存放路劲,有个参数是user.io.dir表示eclipse默认路径,在document and setting ....的某个子目录下。
最好写自己的路径。
几个重要属性,请参考这里。
需要注意的是
当overflowToDisk为true时,在diskStore路劲下生成2个文件,一个是myCache.data和myCache.index,
若diskPersistent 这个属性如果设置为false,main方法(或web应用关闭)结束后上面2个文件就没了。
若diskPersistent 为true,则main方法结束后2文件存在
当再次启动时,程序会加载myCache.index这个文件。
测试方法如下,
public class Test { public static void main(String[] args) { // 指定ehcache.xml的位置 String fileName = "F:/myeclipse/workspace/ecache/src/ehcache.xml"; CacheManager manager = new CacheManager(fileName); // 取出所有的cacheName String names[] = manager.getCacheNames(); for (int i = 0; i < names.length; i++) { System.out.println(names[i]); } Cache cache = manager.getCache("myCache"); System.out.println(cache.getSize()); for(int i=0;i<100000;i++){ cache.put(new Element("key1"+ i , "values1"+i)); } // cache.flush(); manager.shutdown(); } }
需要manager.shutdown(),不然要手动关闭
===================================================================
Ehcache 中ehcache.xml 配置详解和示例
- <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
- <diskStore path="java.io.tmpdir"/>
- <!--
- Mandatory Default Cache configuration. These settings will be applied to caches
- created programmtically using CacheManager.add(String cacheName)
- -->
- <!--
- name:缓存名称。
- maxElementsInMemory:缓存最大个数。
- eternal:对象是否永久有效,一但设置了,timeout将不起作用。
- timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
- timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
- overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
- diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
- maxElementsOnDisk:硬盘最大缓存个数。
- diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
- diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
- memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
- clearOnFlush:内存数量最大时是否清除。
- -->
- <defaultCache
- maxElementsInMemory="10000"
- eternal="false"
- timeToIdleSeconds="120"
- timeToLiveSeconds="120"
- overflowToDisk="true"
- maxElementsOnDisk="10000000"
- diskPersistent="false"
- diskExpiryThreadIntervalSeconds="120"
- memoryStoreEvictionPolicy="LRU"
- />
- </ehcache>