Ehcache 缓存(二)xml配置相关

如果没有配置ehcache.xml文件,ehcache-failsafe.xml将作为默认的ehcache配置。

1.<diskStore path="java.io.tmpdir"/>

a). diskStore(磁盘存储)元素是可选的。当你为任意缓存开启了overflowToDisk或者diskPersistent属性时, 它就必须配置。如果没配置,那么会出现提示信息并默认使用java.io.tmpdir作为存储地址;
diskStore只有一个属性-"path"。它是.data和.index文件被创建时的目录路径;
如果path是一个java系统属性,那么在运行的虚拟机中取而代之的是它真实的路径值。
下列属性会被转化:
* user.home - User's home directory
* user.dir - User's current working directory
* java.io.tmpdir - Default temp file path
* ehcache.disk.store.dir - 你通常会在命令行指定的系统属性,比如:
java -Dehcache.disk.store.dir=/u01/myapp/diskdir ...
也可以在该属性下指定子目录,比如:java.io.tmpdir/one

2. <cacheManagerEventListenerFactory class="" properties=""/>

a) .CacheManagerEventListenerFactory可创建一个CacheManagerPeerProvider(当从CacheManager添加或删除缓存时,它会收到通知)。
CacheManagerEventListenerFactory的属性:
* class - 工厂类名全称
* properties - 以逗号分隔针对工厂配置的属性

b) .CacheManager事件监听器的类名需为全称。
这些事件包括增加一个缓存、删除一个缓存。
回调到监听器的方法有同步和非同步的。而作为实现者的职责,安全的处理潜在的性能和线程安全取决于监听器在做什么。如果没有指定工厂类,那么监听器也不会创建。它是不存在默认值的。

3.(分布式操作可启用)

<cacheManagerPeerProviderFactory
            class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
            properties="peerDiscovery=automatic,multicastGroupAddress=230.0.0.1,multicastGroupPort=4446,timeToLive=1"/>

a) .CacheManagerPeerProviderFactory来创建CacheManagerPeerProvider,在集群中,它可以发现其他的CacheManagers。
CacheManagerPeerProviderFactory的属性:
* class - 工厂类全称
* properties - 以逗号分隔针对工厂配置的属性

b).Ehcache 配备了内置的基于RMI的通讯系统,该系统有两种来发现参与集群的CacheManager的方式:
* 自动的,使用多播组。它可以自动发现同类manager并且探测到它们进入或离开该组的任何变化。
* 手动的,使用使用手动的rmiURL配置。在配置是要提供同类manager的硬编码列表!
b1).可按照下面示例配置自动模式:
<cacheManagerPeerProviderFactory
          class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
          properties="peerDiscovery=automatic,timeToLive=32"/>

可用的属性有:
* peerDiscovery (必须的) - 指定为自动模式
* multicastGroupAddress (必须的) - 指定一个可用的多播组地址
* multicastGroupPort (必须的) - 为多播检测信号交通指定一个专用的端口
* timeToLive - 一个0-255之间的值,来决定数据包将传播多远
按照惯例,会有如下一些限制:
0 - 同一主机
1 - 位于同一子网
32 - 相同的站点
64 - 同一区域
128 - 同一大陆
255 - 无限制
b2). 可按照下面示例配置手动模式:
<cacheManagerPeerProviderFactory class=
            "net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
              properties="peerDiscovery=manual,rmiUrls=//server1:40000/sampleCache1|//server2:40000/sampleCache1
                          | //server1:40000/sampleCache2|//server2:40000/sampleCache2"/>

可用的属性有:
* peerDiscovery(必须的) - 指定为手动模式
* rmiUrls(必须的) - 在form中,形式以管道分隔的rmiURL列表 //hostname:port

4.(分布式操作可启用)

<cacheManagerPeerListenerFactory
            class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>

CacheManagerPeerListenerFactory可用来创建CacheManagerPeerListener(在集群中可监听来自高速缓存复制器的消息)
CacheManagerPeerListenerFactory的属性:
* class - 工厂类全称
* properties - 以逗号分隔针对工厂配置的属性
Ehcache 配备了内置的基于RMI的通讯系统。可用RMICacheManagerPeerListenerFactory配置其监听器组件RMICacheManagerPeerListener。
可按照下面示例配置:
 <cacheManagerPeerListenerFactory
        class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
        properties="hostName=fully_qualified_hostname_or_ip,port=40001,socketTimeoutMillis=120000"/>

所有的属性都是可选的。如下:
* hostName - 运行监听器的主机名。指定位置的主机是多宿主的,而你想控制在集群中接收消息的接口。默认值为默认接口的主机名。
* port - 监听器监听的端口。默认值我自由端口。
* socketTimeoutMillis - 向监听器发送消息时,MS客户端套接字的number将保持开放。即使发送最慢的消息它也应满足。默认值为120000ms

5. (cache的配置)

以下属性是必须的:
name : cache的名称。用于识别cache,不可重复。
maxElementsInMemory : 设置在内存中创建的最大对象个数(如果内存中元素超出该个数,超出的元素就会自动缓存到ehcache.xml设定的磁盘地址中)
eternal : 设置元素是否是永恒的,如果是,那么timeouts将会被忽略且元素永不过期!
overflowToDisk : 当内存中高速缓存已达到最大限制,设置元素是否可以溢出到磁盘
以下属性是可选的:
timeToIdleSeconds : 设置元素过期前的空闲时间。即元素过期前可访问的最大时间量(超过该时间,该缓存会被清除)。只有非eternal的元素才可使用!
值为0意味着元素可以空闲到无限久。默认值为0.
timeToLiveSeconds : 设置元素过期前的存活时间。即元素从创建到过期间最大的时间量。只有非eternal的元素才可使用!
值为0以为着元素可一直保存。默认值为0.

diskPersistent : 重启虚拟机是否依然保存磁盘存储数据。默认值为false。
diskExpiryThreadIntervalSeconds : 运行磁盘终止线程之间的秒数。默认值为120s

diskSpoolBufferSizeMB: 为后台打印缓冲区分配的大小。对这一区域进行写操作然后会异步写入到磁盘。默认大小30MB。每个打印缓冲区只对应自己的cache。如果你遇到内存错误,就可以考虑降低该值。想提高磁盘存储性能就可以考虑增大该值。Trace level logging in the DiskStore will show if put back ups are occurring.

memoryStoreEvictionPolicy: 到达maxElementsInMemory限制时,策略会强制执行。默认的策略是最近最少使用(LRU).其他策略-'先进先出'(FIFO)和'较少使用'(LFU)也可用.
CACHE中元素也可以包含带有相同工厂类和属性格式的子元素。可以如下定义子元素:
* cacheEventListenerFactory - 为缓存事件注册监听器,比如,put,remove,update,和expire
* bootstrapCacheLoaderFactory - 指定BootstrapCacheLoader,由cache在初始化预填充自身时调用。
每个分布式的cache都需要设置一个缓存事件监听器来向其他同行CacheManager传递消息。对于内置的RMI,可对每个分布式缓存的配置添加RMICacheReplicatorFactory类型的cacheEventListenerFactory元素来加以实现。如下例所示:

 <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
         properties="replicateAsynchronously=true,replicatePuts=true,replicateUpdates=true,replicateUpdatesViaCopy=true,replicateRemovals=true "/>

RMICacheReplicatorFactory只识别如下属性:
* replicatePuts=true|false - 放在缓存中的新元素是否被复制到其他缓存中。默认true
* replicateUpdates=true|false - 重写一个已经具有相同键的元素是否被复制。默认为true
* replicateRemovals=true - 移除的元素是否被复制。默认为true
* replicateAsynchronously=true | false - 复制行为是异步(true)还是同步(false)的。默认为true
* replicateUpdatesViaCopy=true | false -是否新元素复制到其他caches中(true),或是发送删除消息。默认值为true
* asynchronousReplicationIntervalMillis=<number of milliseconds>
在使用RMICacheReplicators的集群中,RMIBootstrapCacheLoader引导缓存。它可如下配置:
<bootstrapCacheLoaderFactory
        class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"
        properties="bootstrapAsynchronously=true,maximumChunkSizeBytes=5000000"/>
RMIBootstrapCacheLoaderFactory只识别下列属性: * bootstrapAsynchronously=true|false - cache启动后,bootstrap是否在后台进行。如果为false,引导行为必须在cache可用之前完成。默认值为true。 * maximumChunkSizeBytes=<integer> - cache可能会很大,比虚拟机的内存限制还大。该属性允许引导程序在块中获取元素。默认块大小5MB

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇