ehcache 分布式缓存

来源:互联网 发布:航天信息a6软件 编辑:程序博客网 时间:2024/06/11 18:38
<?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>