ehcache2.x配置⽂件详解约定
⼀般ehcache的配置⽂件名称是l
EHCache是⼀个⾮常轻量级的缓冲,是Hibernate的默认缓存
同时ehcache应该说是java范围内使⽤最⼴泛的缓存。同时它也⽀持分布式缓存。
也提供了磁盘,内存的缓存存储。
微笑让生活更美好400字作文⽰例
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<!-- 指定⼀个⽂件⽬录,当EhCache把数据写到硬盘上时,将把数据写到这个⽂件⽬录下 -->
<diskStore path="pdir"/>
<!-- 设定缓存的默认数据过期策略 -->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="10"
timeToLiveSeconds="20"
diskPersistent="false"
diskSpoolBufferSizeMB="30"
maxEntriesLocalDisk="10000000"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
非诚勿扰佳妮<persistence strategy="localTempSwap"/>
diskExpiryThreadIntervalSeconds="120"/>
<cache name="cacheTest"
maxElementsInMemory="1000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="10"
timeToLiveSeconds="20"/>
</ehcache>
ehcache的xsd
<ehcache xsi="/2001/XMLSchema-instance"
noNamespaceSchemaLocation="/ehcache.xsd">
...
</ehcache>
说明
diskStore
diskStore元素:制定⼀个路径,当EHCache把数据写到硬盘上的时候,
会把数据写到该⽬录下。user.home - ⽤户主⽬录;user.dir - ⽤户当前⼯作⽬录;
pdir - 默认临时⽂件路径。
defaultCache
设定缓存的默认数据过期策略。
cache
设定具体的命名缓存的数据过期策略。
name
缓存名称。通常为缓存对象的类名;
maxElementsInMemory
设置基于内存的缓存可存放对象的最⼤数⽬;
maxElementOnDisk
设置基于硬盘的缓存可存放对象的最⼤数⽬;
eternal
如果为true,表⽰对象永远不会过期,此时会忽略tiemToldleSeconds和timeToLiveSeconds属性默认为false。
timeToldleSeconds
设置允许对象处于空闲状态的最长时间,以秒为单位。
当对象最近⼀次被访问后,如果处于空闲状态的时间超过了
timeToldleSeconds属性值,这个对象就会过期。
当对象过期,EHCache将把它从缓存中清空。只有当eternal属性为false.
该属性才有效。如果该属性的值为0,那么就表⽰该对象可以⽆限期地存于缓存中。
即缓存被创建后,最后⼀次访问时间到缓存失效之时,两者之间的间隔,单位为秒(s)
timeToLiveSeconds
必须⼤于timeToldleSeconds属性,才有意义;
当对象⾃从被存放到缓存中后,如果处于缓存中的时间超过了 timeToLiveSeconds属性值,
这个对象就会过期,EHCache将把它从缓存中清除;
即缓存⾃创建⽇期起能够存活的最长时间,单位为秒(s)
overflowToDisk
如果为true,表⽰当基于内存的缓存中的对象数⽬达到了maxElementsInMemory界限后
会把溢出的对象写到基于硬盘的缓存中。
防微杜渐是什么意思注意,如果缓存的对象要写⼊到硬盘中的话,则该对象必须实现了Serializable接⼝才⾏(也就是序列化);
memoryStoreEvictionPolicy
缓存对象清除策略。
有三种:
1. FIFO:first in first out
先进先出。
2. LFU:Less Frequently Used
⼀直以来最少被使⽤策略,缓存元素有⼀个hit属性,hit(命中)值最⼩的将会被清除出缓存。
3. LRU:least Recenly used
最近最少被使⽤,缓存的元素有⼀个时间戳,当缓存的容量满了,
⽽⼜需要腾出地⽅来缓存新的元素的时候,
那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
diskSpoolBufferSizeMB
写⼊磁盘的缓冲区⼤⼩。
由于diskSpoolBufferSizeMB在内部实际是以字节为单位,读取配置文件失败
所以最⼤值是Integer的最⼤值即2047.99…M,反正不到2G。
所以如果配置的超过2G,将会导致diskSpoolBufferSizeMB为负数,
在put时ehcache误以为磁盘缓存队列已满,每次都执⾏都会阻塞。
maxElementsOnDisk
在DiskStore(磁盘存储)中的最⼤对象数量,如为0,则没有限制
无法复制粘贴
diskPersistent
是否disk store在虚拟机启动时持久化。默认为false
diskExpiryThreadIntervalSeconds
Ehcache后台线程专门做Ellment失效监测以及清除⼯作。
此值不宜设置过低,否则会导致清理线程占⽤⼤量CPU资源。
默认值是120秒。
clearOnFlush
当调⽤flush()是否清除缓存,默认是。
maxEntriesLocalHeap
堆内存中最⼤缓存对象数,0没有限制
defaultCache说明
defaultCache是ehcache中系统⾃带的⼀个默认cache,春节高速路免费的时间2023
其name默认是"default" 并且,⼿动创建(或者读取使⽤)"default"的cache时会报错,
其作⽤是⽤于在程序中创建新的cache时,可以使⽤defaultCache中的默认配置。
即⽤addCache时会默认使⽤defaultcache中的配置.
所以xml其余的cache配置不会继承defaultCache的配置
private Cache addCache(String cacheName) {
CacheConfiguration cacheConfiguration = getCacheManager().getConfiguration().getDefaultCacheConfiguration();    cacheConfiguration.setName(cacheName);
Cache newCache = new Cache(cacheConfiguration);
getCacheManager().addCache(newCache);
return newCache;
}
注意
参考