JSP学习笔记(七十六):使用EHCache
一、获取EHCache
下载地址:http://ehcache.sourceforge.net/
二、使用EHCache
添加对应的jar包到classpath中:我使用的是1.5,需要添加ehcache-1.5.0.jar,backport-util-concurrent-3.0.jar,commons-logging-1.0.4.jar(这个包struts2中有,我没有添加)
在src目录建立ehcache.xml文件,内容如下:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd">
<diskStore path="java.io.tmpdir"/>
<defaultCache name="cache1" maxElementsInMemory="300" eternal="false"
timeToIdleSeconds="500" timeToLiveSeconds="500" overflowToDisk="true" />
</ehcache>
摘抄部分网上内容如下:
defaultCache: 默认缓存配置
必须属性:
name:设置缓存的名称,用于标志缓存,惟一
maxElementsInMemory:在内存中最大的对象数量
maxElementsOnDisk:在DiskStore中的最大对象数量,如为0,则没有限制
eternal:设置元素是否永久的,如果为永久,则timeout忽略
overflowToDisk:是否当memory中的数量达到限制后,保存到Disk
可选的属性:
timeToIdleSeconds:设置元素过期前的空闲时间
timeToLiveSeconds:设置元素过期前的活动时间
diskPersistent:是否disk store在虚拟机启动时持久化。默认为false
diskExpiryThreadIntervalSeconds:运行disk终结线程的时间,默认为120秒
memoryStoreEvictionPolicy:策略关于Eviction
缓存子元素:
cacheEventListenerFactory:注册相应的的缓存监听类,用于处理缓存事件,如put,remove,update,和expire
bootstrapCacheLoaderFactory:指定相应的BootstrapCacheLoader,用于在初始化缓存,以及自动设置。
如下的例子:
<cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=true,
replicatePuts=true,
replicateUpdates=true,
replicateUpdatesViaCopy=true,
replicateRemovals=true "/>
<bootstrapCacheLoaderFactory
class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"
properties="bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
cache配置同defaultCache
<cache name="sampleDistributedCache1"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="100"
timeToLiveSeconds="100"
overflowToDisk="false">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
<bootstrapCacheLoaderFactory
class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"/>
</cache>
添加一个类,缓存一个对象:
CacheManager manager = CacheManager.getInstance();
String CacheName = "myCache";
Cache cache = manager.getCache(CacheName);
if (cache == null) {
manager.addCache(CacheName);
cache = manager.getCache(CacheName);
}
String cacheKey = "myKey";
Element element = cache.get(cacheKey);
if (element == null) {
str = "123";
cache.put(new Element(cacheKey,str));
System.out.println(123);
} else {
str = (String)element.getValue();
System.out.println(456);
}
System.out.println(str);