<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="true" monitoring="autodetect"
dynamicConfig="true">
<diskStore path="java.io.tmpdir/TEMP_EHCACHE" />
<!--JGroups TCP尚未测试成功-->
<!--<cacheManagerPeerProviderFactory-->
<!--class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"-->
<!--properties="connect=TCP(bind_addr=172.31.213.62;bind_port=7800):-->
<!--TCPPING(initial_hosts=172.31.213.62[7800],172.31.213.61[7800];port_range=10;timeout=3000):-->
<!--VERIFY_SUSPECT(timeout=1500):-->
<!--pbcast.NAKACK(retransmit_timeout=3000):-->
<!--pbcast.GMS(join_timeout=5000;-->
<!--print_local_addr=true)"-->
<!--propertySeparator="::" />-->
<!--JGroups UDP单台服务器模拟俩个端口已测试成功-->
<cacheManagerPeerProviderFactory class ="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
properties ="connect = UDP(mcast_addr = 231.12.21.132; mcast_port = 45566; ip_ttl = 255;
mcast_send_buf_size = 150000; mcast_recv_buf_size = 80000):
PING(timeout = 2000; num_initial_members = 6):
MERGE2(min_interval = 5000; max_interval = 10000):
FD_SOCK:VERIFY_SUSPECT(timeout = 1500):
pbcast.NAKACK( retransmit_timeout = 3000 ):
UNICAST(timeout = 5000):
pbcast.STABLE(desired_avg_gossip = 20000):
FRAG:
pbcast.GMS(print_local_addr = true)"
propertySeparator ="::"
/>
<!--
name:缓存名称.
maxElementsInMemory:缓存最大数目
maxElementsOnDisk:硬盘最大缓存个数.
eternal:对象是否永久有效,一但设置了,timeout将不起作用.
overflowToDisk:是否保存到磁盘,当系统当机时
timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒).仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大.
timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒).最大时间介于创建时间和失效时间之间.仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大.
diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小.默认是30MB.每个Cache都应该有自己的一个缓冲区.
diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒.
memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存.默认策略是LRU(最近最少使用).你可以设置为FIFO(先进先出)或是LFU(较少使用).
clearOnFlush:内存数量最大时是否清除.
memoryStoreEvictionPolicy:可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数).
FIFO,first in first out,这个是大家最熟的,先进先出.
LFU, Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的.如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存.
LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存.
class – 使用net.sf.ehcache.distribution.RMICacheReplicatorFactory
这个工厂支持以下属性:
replicatePuts=true | false – 当一个新元素增加到缓存中的时候是否要复制到其他的peers. 默认是true.
replicateUpdates=true | false – 当一个已经在缓存中存在的元素被覆盖时是否要进行复制.默认是true.
replicateRemovals= true | false – 当元素移除的时候是否进行复制.默认是true.
replicateAsynchronously=true | false – 复制方式是异步的(指定为true时)还是同步的(指定为false时).默认是true.
replicatePutsViaCopy=true | false – 当一个新增元素被拷贝到其他的cache中时是否进行复制指定为true时为复制,默认是true.
replicateUpdatesViaCopy=true | false – 当一个元素被拷贝到其他的cache中时是否进行复制(指定为true时为复制),默认是true.
-->
<defaultCache
eternal="false"
maxElementsInMemory="1000"
overflowToDisk="false"
diskPersistent="false"
timeToIdleSeconds="1000"
timeToLiveSeconds="1000"
memoryStoreEvictionPolicy="LRU" >
<cacheEventListenerFactory
class ="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
properties ="replicateAsynchronously = true,replicatePuts = true,
replicateUpdates = true,replicateUpdatesViaCopy = false,
replicateRemovals = true"/>
<bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsBootstrapCacheLoaderFactory"/>
</defaultCache>
<cache name ="activity"
maxElementsInMemory="100000"
overflowToDisk="false"
diskPersistent="false"
timeToIdleSeconds="1000"
timeToLiveSeconds="1000"
memoryStoreEvictionPolicy="LRU" >
<cacheEventListenerFactory
class ="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
properties ="replicateAsynchronously = true,replicatePuts = true,
replicateUpdates = true,replicateUpdatesViaCopy = false,
replicateRemovals = true"/>
<bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsBootstrapCacheLoaderFactory"/>
</cache>
<cache name ="goods"
maxElementsInMemory="100000"
overflowToDisk="false"
diskPersistent="false"
timeToIdleSeconds="1000"
timeToLiveSeconds="1000"
memoryStoreEvictionPolicy="LRU" >
<cacheEventListenerFactory
class ="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
properties ="replicateAsynchronously = true,replicatePuts = true,
replicateUpdates = true,replicateUpdatesViaCopy = false,
replicateRemovals = true"/>
<bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsBootstrapCacheLoaderFactory"/>
</cache>
<cache name ="properties"
maxElementsInMemory="100000"
overflowToDisk="false"
diskPersistent="false"
timeToIdleSeconds="1000"
timeToLiveSeconds="1000"
memoryStoreEvictionPolicy="LRU" >
<cacheEventListenerFactory
class ="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
properties ="replicateAsynchronously = true,replicatePuts = true,
replicateUpdates = true,replicateUpdatesViaCopy = false,
replicateRemovals = true"/>
<bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsBootstrapCacheLoaderFactory"/>
</cache>
<cache name ="cart"
maxElementsInMemory="100000"
overflowToDisk="false"
diskPersistent="false"
timeToIdleSeconds="1000"
timeToLiveSeconds="1000"
memoryStoreEvictionPolicy="LRU" >
<cacheEventListenerFactory
class ="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
properties ="replicateAsynchronously = true,replicatePuts = true,
replicateUpdates = true,replicateUpdatesViaCopy = false,
replicateRemovals = true"/>
<bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsBootstrapCacheLoaderFactory"/>
</cache>
<!--以下为RMI配置-->
<!--缓存成员发现工厂,管理cacheManager对象 -->
<!--<cacheManagerPeerProviderFactory-->
<!--class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"-->
<!--properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, multicastGroupPort=4446,-->
<!--multicastPacketTimeToLive=1" />-->
<!--针对cacheManager事件的监听,这里只介绍properties中的hostName、port属性,
这里我忽略了hostName的配置,查看他们的源码发现如果不填写hostName,
他们就会通过JDK中的InterAddress.getLocalHost().getHostAddress()获取本机的ip地址,
所以在这里我没有填写hostName的配置,方便部署到多台硬件服务器上.
但是如果一台已经服务器上有多个网卡,这里一定要指定hostName的IP,原因参考InterAddress源码.
post这里我指定的时40001,如果这里不填写port配置,ehcache就会通过ServerSocket的getLocalPort获取一个本机没有被占用的端口 -->
<!--<cacheManagerPeerListenerFactory-->
<!--class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"-->
<!--properties="port=40001" />-->
<!--<defaultCache maxElementsInMemory="10000" eternal="true"-->
<!--overflowToDisk="true" timeToIdleSeconds="0" timeToLiveSeconds="0"-->
<!--diskPersistent="false" diskExpiryThreadIntervalSeconds="120">-->
<!--<cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true,replicateUpdatesViaCopy= false, replicateRemovals= true " />-->
<!--</defaultCache>-->
<!--<cache name="activity" maxElementsInMemory="100000" eternal="true"-->
<!--overflowToDisk="true" timeToIdleSeconds="0" timeToLiveSeconds="0"-->
<!--diskPersistent="false" diskExpiryThreadIntervalSeconds="120">-->
<!--<cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true,replicateUpdatesViaCopy= false, replicateRemovals= true " />-->
<!--</cache>-->
<!--<cache name="properties" maxElementsInMemory="10000" eternal="true"-->
<!--overflowToDisk="true" timeToIdleSeconds="0" timeToLiveSeconds="0"-->
<!--diskPersistent="false" diskExpiryThreadIntervalSeconds="120">-->
<!--<cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true,replicateUpdatesViaCopy= false, replicateRemovals= true " />-->
<!--</cache>-->
<!--<cache name="goods" maxElementsInMemory="100000"-->
<!--eternal="true" overflowToDisk="true" timeToIdleSeconds="0"-->
<!--timeToLiveSeconds="0" diskPersistent="false"-->
<!--diskExpiryThreadIntervalSeconds="120">-->
<!--<cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true,replicateUpdatesViaCopy= false, replicateRemovals= true " />-->
<!--</cache>-->
<!--<cache name="cart" maxElementsInMemory="100000"-->
<!--eternal="true" overflowToDisk="true" timeToIdleSeconds="0"-->
<!--timeToLiveSeconds="0" diskPersistent="false"-->
<!--diskExpiryThreadIntervalSeconds="120">-->
<!--<cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true,replicateUpdatesViaCopy= false, replicateRemovals= true " />-->
<!--</cache>-->
</ehcache>