http://haohaoxuexi.iteye.com/blog/2113728

ehcache.xml简介

ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheManager的配置信息的。根据之前我们在《Ehcache简介》一文中对CacheManager的介绍我们知道一切Ehcache的应用都是从CacheManager开始的。在不指定配置信息参数创建CacheManager时,CacheManager将首先在类路径的根目录下寻找一个叫ehcache.xml的文件作为CacheManager的配置文件。如果不存在这样的文件则将使用封装在ehcache jar包中的ehcahce-failsafe.xml文件作为创建CacheManager的默认配置信息。除了使用Configuration作为参数外,使用其它参数构造CacheManager都是基于xml格式的配置信息的。当我们使用xml配置文件作为CacheManager的配置信息时,我们的文件名不一定叫ehcache.xml,这里只是把ehcache.xml文件作为这一类文件的一个代表,它们拥有共同的文档结构。本文将对ehcache.xml做一个简要的介绍,主要介绍常用的配置项。

1       ehcache元素

首先我们的ehcache.xml文件必须遵守Ehcache的Xml Schema的定义,我们可以直接使用在线的http://ehcache.org/ehcache.xsd,也可以直接从该地址把ehcache.xsd文件下载到本地。ehcache.xml文件的根元素必须是ehcache,一个ehcache元素就相当于一个CacheManager,我们在ehcache元素上指定的属性以及在ehcache元素下定义的子元素都是针对于当前CacheManager的,比如我们在ehcache元素下定义了一个cache元素,那就代表我们所定义的CacheManager中有这么一个Cache存在。ehcache元素上的属性都是可选的,我们可以在ehcache元素上指定ehcache.xml文件所遵循的schema所在的位置,如:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"> </ehcache>

1.1     可选属性

除了指定ehcache.xml文件所遵循的schema之外,我们的ehcache元素还可以指定很多的属性,主要有如下这些。

       name:指定当前CacheManager的名称。

       dynamicConfig:boolean类型。表示是否可以动态的更新配置,默认为true。当设置为false的时候,我们在运行期通过CacheManager的Configuration来改变配置信息时将不会发生作用。使用代码进行配置时我们可以通过Configuration对象的dynamicConfig(boolean dynamicConfig)方法来指定该配置。

       maxBytesLocalDisk:在CacheManager级别指定能够使用的本地磁盘的最大容量。当指定了该属性后隐式的使所有Cache的overflowToDisk变为true,如需关闭则需要在对应的Cache上设置overflowToDisk为false。

       maxBytesLocalHeap:在CacheManager级别指定能够使用的堆内存的最大容量。

       maxBytesLocalOffHeap:在CacheManager级别指定能够使用的非堆内存的最大容量。当指定了该属性后会隐式的使所有Cache的overflowToDisk变为true,如需关闭则需在对应的Cache上设置overflowToOffHeap为false。该属性只对企业版Ehcache有用。

       defaultTransactionTimeoutInSeconds:

       updateCheck:boolean类型,是否检查更新,默认为true。当设置为true时,CacheManager会定期的从网上去检查当前的Ehcache是否是最新的版本,如果不是,则会将比当前版本新的版本列出来。

需要注意的是当我们在CacheManager级别上指定了maxBytesLocalOffHeap时会使overflowToOffHeap的默认值变为true。也就是说该CacheManager里面所有的Cache在没有显示的指定overflowToOffHeap属性值时其值默认都是true,原本默认是false。

2       cache元素

cache元素是ehcache元素的子元素,一个cache元素就代表一个Ehcache对象的定义。对于一个cache元素而言我们最简单的定义方式是只需要指定所定义的Ehcache的名称,其它的都使用默认配置。默认配置将使用defaultCache元素的定义(这将在后文中讲到)。

2.1     属性

cache元素中可以指定的属性也有很多,但只有一个是必须的。那就是name属性。

       name:指定cache的名称。

       maxEntriesLocalDisk:指定允许在硬盘上存放元素的最大数量,0表示不限制。这个属性我们也可以在运行期通过CacheConfiguration来更改。

       maxEntriesLocalHeap:指定允许在内存中存放元素的最大数量,0表示不限制。这个属性也可以在运行期动态修改。

       maxEntriesInCache:指定缓存中允许存放元素的最大数量。这个属性也可以在运行期动态修改。但是这个属性只对Terracotta分布式缓存有用。

       maxBytesLocalDisk:指定当前缓存能够使用的硬盘的最大字节数,其值可以是数字加单位,单位可以是K、M或者G,不区分大小写,如:30G。当在CacheManager级别指定了该属性后,Cache级别也可以用百分比来表示,如:60%,表示最多使用CacheManager级别指定硬盘容量的60%。该属性也可以在运行期指定。当指定了该属性后会隐式的使当前Cache的overflowToDisk为true。

       maxBytesLocalHeap:指定当前缓存能够使用的堆内存的最大字节数,其值的设置规则跟maxBytesLocalDisk是一样的。

       maxBytesLocalOffHeap:指定当前Cache允许使用的非堆内存的最大字节数。当指定了该属性后,会使当前Cache的overflowToOffHeap的值变为true,如果我们需要关闭overflowToOffHeap,那么我们需要显示的指定overflowToOffHeap的值为false。

       overflowToDisk:boolean类型,默认为false。当内存里面的缓存已经达到预设的上限时是否允许将按驱除策略驱除的元素保存在硬盘上,默认是LRU(最近最少使用)。当指定为false的时候表示缓存信息不会保存到磁盘上,只会保存在内存中。该属性现在已经废弃,推荐使用cache元素的子元素persistence来代替,如:<persistence strategy=”localTempSwap”/>。

diskSpoolBufferSizeMB:当往磁盘上写入缓存信息时缓冲区的大小,单位是MB,默认是30。

       overflowToOffHeap:boolean类型,默认为false。表示是否允许Cache使用非堆内存进行存储,非堆内存是不受Java GC影响的。该属性只对企业版Ehcache有用。

       copyOnRead:当指定该属性为true时,我们在从Cache中读数据时取到的是Cache中对应元素的一个copy副本,而不是对应的一个引用。默认为false。

       copyOnWrite:当指定该属性为true时,我们在往Cache中写入数据时用的是原对象的一个copy副本,而不是对应的一个引用。默认为false。

       timeToIdleSeconds:单位是秒,表示一个元素所允许闲置的最大时间,也就是说一个元素在不被请求的情况下允许在缓存中待的最大时间。默认是0,表示不限制。

       timeToLiveSeconds:单位是秒,表示无论一个元素闲置与否,其允许在Cache中存在的最大时间。默认是0,表示不限制。

       eternal:boolean类型,表示是否永恒,默认为false。如果设为true,将忽略timeToIdleSeconds和timeToLiveSeconds,Cache内的元素永远都不会过期,也就不会因为元素的过期而被清除了。

       diskExpiryThreadIntervalSeconds :单位是秒,表示多久检查元素是否过期的线程多久运行一次,默认是120秒。

       clearOnFlush:boolean类型。表示在调用Cache的flush方法时是否要清空MemoryStore。默认为true。

       memoryStoreEvictionPolicy:当内存里面的元素数量或大小达到指定的限制后将采用的驱除策略。默认是LRU(最近最少使用),可选值还有LFU(最不常使用)和FIFO(先进先出)。

2.2     子元素

       persistence:表示Cache的持久化,它只有一个属性strategy,表示当前Cache对应的持久化策略。其可选值如下:

l  localTempSwap:当堆内存或者非堆内存里面的元素已经满了的时候,将其中的元素临时的存放在磁盘上,一旦重启就会消失。

l  localRestartable:该策略只对企业版Ehcache有用。它可以在重启的时候将堆内存或者非堆内存里面的元素持久化到硬盘上,重启之后再从硬盘上恢复元素到内存中。

l  none:不持久化缓存的元素

l  distributed:该策略不适用于单机,是用于分布式的。

       copyStrategy:当我们指定了copyOnRead或copyOnWrite为true时,就会用到我们的copyStrategy,即拷贝策略了。默认的copyStrategy是通过序列化来实现的,我们可以通过实现net.sf.ehcache.store.compound.CopyStrategy接口来实现自己的CopyStrategy,然后只需在cache元素下定义一个copyStrategy元素并指定其class属性为我们的CopyStrategy实现类。如:<copyStrategy class="xxx.xxx.xxx"/>。

       pinning:表示将缓存内的元素固定住,除非过期,否则不会对它进行删除和驱除到其它储存容器中。pinning元素只定义了一个属性store,表示将把元素固定在哪个位置。其可选值有localMemory和inCache。

l  localMemory:表示将元素固定在内存中。

l  inCache:表示将元素固定在任何其正在保存的容器中。

3       defaultCache

defaultCache元素是用来指定cache的默认配置的,其可以指定的信息大体上跟cache元素是一样的。这些配置只会对在程序中通过CacheManager的addCache(String cacheName)方法添加的Cache起作用。

假设我们的ehcache.xml文件的内容如下:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
maxBytesLocalDisk="20G" maxBytesLocalHeap="10M"> <defaultCache copyOnRead="true" copyOnWrite="true" overflowToOffHeap="false"/> <cache name="test2" overflowToOffHeap="false"/> </ehcache>

我们可以看到我们指定了defaultCache的copyOnRead和copyOnWrite为true,表示在读和取的时候都会使用拷贝的副本。然后定义了一个叫test2的Cache。接着我们进行如下测试:

@Test
publicvoid testDefaultCache() {
CacheManager cacheManager = CacheManager.create();
//cache1将使用默认配置
cacheManager.addCache("cache1");
Cache cache1 = cacheManager.getCache("cache1");
Element ele = new Element("key", "value");
cache1.put(ele);
Element ele2 = cache1.get("key");
System.out.println(ele == ele2); //false Cache test2 = cacheManager.getCache("test2");
test2.put(ele);
Element ele3 = test2.get("key");
System.out.println(ele == ele3); //true
}

我们通过cacheManager指定缓存名称的方式添加了一个叫cache1的Cache,该Cache将使用默认配置,即defaultCache指定的配置。然后我们定义了一个元素ele,并将其存放到cache1中,由于指定了copyOnWrite为true,所以在存放的时候其实存放的是ele的一个拷贝,而不是其引用。之后我们再从cache1中把ele拿出来并赋值给元素ele2,由于我们指定了copyOnRead为true,所以我们拿出来的会是缓存中ele的一个拷贝。之后我们对ele和ele2进行比较,其结果为false。然后我们往ehcache.xml中定义好的名叫test2的Cache中存入ele,因为test2没有指定copyOnWrite为true,所以这里存放的是ele的引用。之后我们再从test2中读取ele并赋值给ele3,因为我们没有指定test2的copyOnRead为true,所以这里读取出来的还是之前存放的ele的引用。之后再比较它们的地址,所得结果为相等。

4       diskStore元素

diskStore元素是用来指定磁盘存储的路径的,其只接收一个参数path,表示表示磁盘存储的路径。如:

<diskStore path="d:\\ehcache" />

如果不希望Ehcache创建磁盘存储的路径,则可以不定义diskStore元素。在没有定义diskStore,但有cache需要使用磁盘存储时会默认使用java.io.tmpdir作为磁盘存储的路径。

diskStore元素的path属性使用如下值时将自动替换为实际对应的值。

l  java.io.tmpdir:默认的临时文件存放路径。

l  user.home:用户的主目录。

l  user.dir:用户的当前工作目录,即当前程序所对应的工作路径。

l  其它通过命令行指定的系统属性,如“java –DdiskStore.path=D:\\abc ……”。

(注:本文是基于Ehcache2.8.1所写)

Ehcache(02)——ehcache.xml简介的更多相关文章

  1. 2.ehcache.xml简介

    转自:https://www.cnblogs.com/crazylqy/p/4238148.html ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheMa ...

  2. 1.Ehcache(01)——简介、基本操作

    转自:https://blog.csdn.net/w1014074794/article/details/51086228 Ehcache简介 目录 1       CacheManager 1.1  ...

  3. Ehcache(01)——简介、基本操作

    http://haohaoxuexi.iteye.com/blog/2112170 目录 1       CacheManager 1.1      构造方法构建 1.2      静态方法构建 2  ...

  4. Ehcache配置文件ehcache.xml

    <?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http:// ...

  5. XML 参考:XML基础 XML 简介

    XML 参考:XML基础 -- XML简介和用途 转:http://www.cnblogs.com/Dlonghow/archive/2009/01/22/1379799.html XML 参考:XM ...

  6. PHP XML简介

    php xml文件编程. xml简介 XML作用 1.可以作为程序间通讯的标准(ajax text xml) 2.可以作为配置文件 3.可以作为小型数据库 XML语法 一个xml文件应该包括以下几个内 ...

  7. 雷林鹏分享:XML 简介

    XML 简介 XML 被设计用来传输和存储数据. HTML 被设计用来显示数据. 应该掌握的基础知识 在您继续学习之前,需要对以下知识有基本的了解: HTML JavaScript 如果您希望首先学习 ...

  8. web.xml里welcome-file欢迎页面配置及web.xml简介

    web项目欢迎页面的配置 <welcome-file-list> <welcome-file>/WEB-INF/index.html</welcome-file> ...

  9. Dom4j下载及使用Dom4j读写XML简介(转)

    Dom4j下载及使用Dom4j读写XML简介 要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/目前最新dom4j包下载地址:ht ...

随机推荐

  1. Windows SDK 实现不规则窗口介绍

    不规则窗口在程序界面设计中能提供非常好的用户体验,以下是我程序运行时的效果图: 以下是代码,注意需要修改一些简单的位置,如资源ID,项目的头文件等,这些是根据你创建的win32程序的项目名改变的,我的 ...

  2. 由于管理员设置的策略,该磁盘处于脱机状态-Win 2008 R2

    问题截图: 做了个小说网站www.114369.cn,使用的是云主机,系统是Win 2008 R2,进入服务器后发现磁盘有问题 只有c盘,没有d盘,提示:由于管理员设置的策略,该磁盘处于脱机状态 解决 ...

  3. UrlRewriter.dll伪静态实现二级域名泛解析

    大家应该知道,微软的URLRewrite能够对URL进行重写,但是也只能对域名之后的部分进行重写,而不能对域名进行重写, 如:可将 http://http://www.115sou.com/qq/  ...

  4. 为什么会出现ADB rejected shell command

    出现这个问题,是由于在运行过程中,android emulator 没有打开,可以在run configurations--target- automatic-设置自己的android-version ...

  5. Mysql的 时间戳转换 和 c# 的时间戳转换 (以秒来进行转换,非毫秒,主要是mysql不能存毫秒)

    Mysql 时间戳函数 => 从时间 转成 时间戳   UNIX_TIMESTAMP() 获取当前服务器时间的时间戳 UNIX_TIMESTAMP('2013-01-01 12:33:19') ...

  6. codeforces 333B - Chips

    注意:横向纵向交叉时,只要两条边不是正中的边(当n&1!=1),就可以余下两个chip. 代码里数组a[][]第二维下标 0表示横向边,1表示纵向边. #include<stdio.h& ...

  7. 开启Ubuntu Linux下VirtualBox访问USB功能

    解决方法如下: 1.增加用户组usbfs sudo groupadd usbfs 2.查看usbfs用户组的gid cat /etc/group | grep usbfs usbfs:x:1002: ...

  8. [转载] python+Eclipse+pydev环境搭建

    转自:http://www.cnblogs.com/Bonker/p/3584707.html 编辑器:Python 自带的 IDLE 简单快捷, 学习Python或者编写小型软件的时候.非常有用. ...

  9. Jacoco远程统计代码覆盖率

    Jacoco   什么是Jacoco? Jacoco是一个开源的Java代码覆盖率工具,Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAg ...

  10. 用duilib制作仿QQ2013动态背景登录器

    转载请说明原出处,谢谢~~ 在上一篇博客里,我修复了CActiveXUI控件的bug,从而可以使用flash动画来制作程序的背景,这篇博客说明一下应该怎么使用CActiveXUI控件创建透明无窗体的背 ...