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(),不然要手动关闭