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所写)
摘自:http://haohaoxuexi.iteye.com/blog/2113728
相关推荐
10. **部署与配置**:源码部署在Tomcat、Jetty等Java应用服务器上,通过修改server.xml、web.xml等配置文件进行服务器和应用的配置。 总的来说,JSP源码——THB2B.zip是一个涵盖Web开发多个层面的项目,涉及前端...
这里我们关注的是Ehcache的核心库,具体是三个不同版本——ehcache-core-2.6.11,ehcache-core-2.6.9,以及ehcache-core-2.5.0。 1. Ehcache核心功能: Ehcache的核心功能包括内存缓存、磁盘缓存、分布式缓存以及...
在Ehcache通过Jgroups进行集群配置时,首先需要理解Jgroups的配置文件——`jgroups.xml`。这个文件定义了集群中节点如何相互发现、通信以及故障检测的规则。配置文件中的关键元素包括: 1. **Transport**: 定义了...
默认情况下,Hibernate提供了第一级缓存——Session缓存,但对于更复杂的缓存需求,如跨Session的共享缓存,Ehcache则作为第二级缓存被引入。第二级缓存可以存储更多数据,减少对数据库的依赖,提高并发性能。 **...
在本篇《Mybatis入门实例(二)——添加ehcache缓存支持》中,我们将深入探讨如何在Mybatis框架中集成Ehcache作为二级缓存,以提高数据访问的效率和性能。Ehcache是一个开源的Java分布式缓存,广泛用于缓存应用程序中...
在这个场景中,我们关注的是Hibernate的配置文件——`hibernate.cfg.xml`。这个文件是Hibernate应用的核心,它定义了数据源、SessionFactory、实体类映射等关键信息,使得Java对象可以直接与数据库进行交互。 首先...
此外,Ehcache还提供了一个Web管理界面——`Ehcache Web Console`,通过HTTP接口展示实时的缓存统计信息,方便开发者进行远程监控。 在Ehcache的配置文件(通常是ehcache.xml)中,我们可以设置监控相关的参数,...
在本文中,我们将深入探讨Ehcache的功能实现以及如何与Spring框架进行集成,同时通过两个项目实例——`TestEhcacheSpring.zip`和`TestEhcache.zip`来具体说明。 ### Ehcache核心功能 1. **缓存管理**: Ehcache允许...
Ehcache是一款高性能、广泛使用的Java缓存库,它的独立服务器版本——ehcache-standalone-server-1.0.0-distribution.tar.gz,是专为处理大规模数据缓存需求而设计的解决方案。这个压缩包包含了运行Ehcache独立...
本文将深入探讨Hibernate与Oracle数据库集成的配置文件——`hibernate1.cfg.xml`,并解析其中的重要元素。 `hibernate1.cfg.xml`是Hibernate配置的核心文件,它定义了数据源、连接池、持久化类、缓存策略等关键信息...
Ehcache 的配置文件通常是 `ehcache.xml`,但也可以自定义配置文件名。配置文件允许用户自定义缓存的行为和特性,如缓存的大小限制、持久化选项等。 ##### 1. 配置元素说明 - **diskStore**:配置磁盘存储选项,...
#### 一、Ehcache简介与特点 **Ehcache** 是一款高性能、轻量级且易于使用的进程内缓存解决方案。它支持多种缓存模式,包括只读(read-only)和读写(read/write),并且能够存储数据于内存或磁盘中,为开发者提供...
在这个名为 "mybatis第三方缓存需要的文件.zip" 的压缩包中,包含的是 MyBatis 整合第三方缓存——EhCache 的相关组件和配置文件。 首先,我们要了解 EhCache 是一个开源的 Java 缓存库,它可以被用于存储和检索...
2. **配置EhCache**:可以通过`ehcache.xml`文件或Java配置类来配置EhCache。 ```xml <!-- ehcache.xml 示例 --> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:...
**标题解析:** "ehcache缓存对象" 这个标题指的是Ehcache这个缓存系统中的核心元素——缓存对象。Ehcache是Java中广泛使用的开源缓存框架,它能够有效地存储和检索数据,以提高应用程序的性能。这里的“缓存对象”...
总的来说,`database jndi setting ehcache`涉及到了Java应用的两大关键组件——数据库连接管理和高效的缓存机制。理解并正确配置这两个部分,对于优化应用性能、提高系统可用性至关重要。通过阅读和理解上述配置...
首先,我们需要理解Hibernate的核心配置文件——`hibernate.cfg.xml`。这个文件是Hibernate与数据库建立连接的桥梁,它包含了数据库连接信息、实体映射、事务处理等关键设置。 1. **数据库连接设置**:在`hibernate...
在Ehcache 1.8.0中,配置主要通过`ehcache.xml`文件进行。以下是一些关键配置元素: - `<cache>`:定义一个缓存,包括名称、最大大小、存活时间和过期时间等属性。 - `<terracotta>`:如果使用Ehcache的分布式功能...
2. **配置文件**:在Hibernate3中,通常需要两个主要的配置文件——`hibernate.cfg.xml`和实体类的映射文件(如`.hbm.xml`)。`hibernate.cfg.xml`配置数据库连接信息,而`.hbm.xml`文件则定义了类与表之间的映射...
### 缓存技术详解——基于Ehcache开源框架的关键知识点 #### 一、Ehcache简介及背景 Ehcache是一种高性能、易于使用的开源缓存框架,最初与Hibernate项目紧密相关,随后发展成为独立的缓存解决方案。它旨在提供一...