转自:http://scholers.iteye.com/blog/630373
配置文件例子:
ehcache>
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
</ehcache>
1. 预览
Ehcache 从 Hibernate 发展而来,逐渐涵盖了Cahce界的全部功能,是目前发展势头最好的一个项目。
标准缓存
分布式缓存(基于RMI/JGroups/JMS)
URL,页面片段缓存(类似OSCache的相关部分)
中央缓存服务器(类似Memcached)
2. 基本功能与配置
Ehcache的基本功能,可以从配置文件中学习。详见Ehcache的文档
总的来说,缓存与HashMap的最大不同,就是缓存设想内存是有限的,缓存的时效性也是有限的,所以可以设定内存数量的大小,可以执行失效算法 ,可以在内存满了的时候,按照最少访问等算法将缓存直接移除或切换到硬盘上。
另外注意,ehcache的CacheManager本身有一定的默认值。而在没有指定ehcache.xml的情况下, 会使用ehcache.jar里自带的ehcache_failsafe.xml,
2.1 对象在内存中的最大数量
因为内存是有限的,所以必须用maxElementsInMemory(必填项)设置每类对象在内存中的最大数量。ehcache_failsafe.xml 中为10000。
2.2 到达内存中最大量时的过期/移出算法
过期算法: 如果缓存已经失效,人道毁灭之。失效算法由3个参数组成:
eternal(必填项):如果为true,则永不过期,忽略后两个参数的设置。ehcache_failsafe.xml 为false.
timeToIdleSeconds: 空闲无访问时间,默认为0,永不过时。ehcache_failsafe.xml 设为120秒。
timeToLiveSeconds: 空闲无访问时间,默认为0,永不过时。ehcache_failsafe.xml 设为120秒。
移出算法:如果经过失效算法后,还是有很多有效的缓存,则执行清除算法。清除算法由两个参数组成:
memoryStoreEvictionPolicy: 默认为LRU(最近最少访问),另有先进先出(FIFO),最少访问次数(LFU)
overflowToDisk(必填项) 为true,则将清除出来的缓存持久化到磁盘,否则人道毁灭之。
2.3 储存到硬盘
maxElementsOnDisk,默认为0,无限多。ehcache_failsafe.xml为10000000。
diskExpiryThreadIntervalSeconds:使用过期算法清除磁盘中失效对象的间隔,默认为120秒。
diskSpoolBufferSizeMB ,默认为30M。
2.4 重启时缓存持久化
diskPersistent 当应用重启时,可将缓存先持久化到硬盘,重启后再行载入,节省大量的重新从数据库载入。但只适合那些缓存不怎么变化,或者有特殊机制保证重启后应用能接收到重启这段时间里缓存变化信息的情况。
3. 分布式缓存
Ehcache 有传统的RMI,1.5版的JGroups,1.6版的JMS,随大流还是先用RMI的好些。
3.1设置自身
这里设置在localhost的40001端口上侦听。如果要互相同步的CahceManager不都在一台机器上的话,hostName应该是实际IP。)
<cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="hostName=localhost, port=40001,socketTimeoutMillis=2000" />
3.2 设置需要同步的对方服务器及缓存对象,
这里设置与40002端口上的CacheManager同步User与Role对象,如果还有第三台机器,则继续用|分割,继续往下列。同理,在40002端口上的cacheManager的ehcache.xml里,就需要配置与400001,40003的互通)
也有自动发现,广播的简单配法,但对广播天然恐惧,还是辛苦一点一个个静态列表配置文件的写了,虽然有点烦。
<cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual,
rmiUrls=//localhost:40002/org.springside.examples.miniweb.entity.user.User|//localhost:40002/org.springside.examples.miniweb.entity.user.Role"/>
3.3 缓存对象的配置
往每一个需要缓存的对象加入子对象cacheEventListenerFactory
<cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=true,
replicatePuts=true,
replicateUpdates=true,
replicateUpdatesViaCopy=true,
replicateRemovals=true
asynchronousReplicationIntervalMillis=<number of milliseconds">
propertySeparator="," />
replicateAsynchronously 对象同步是否异步完成,默认为true。如果比较紧急就设为false。 在一致性时间性要求不强的时候,设为异步可大大提供性能,因为它是异步立即返回的,而且可以批量提交。
replicateUpdatesViaCopy 是否将对象变更复制到所有节点,还是只是发送一个失效信息,让对方该缓存失效,当对方需要该缓存时重新计算载入。
默认为true。鉴于对象复制的消耗挺大的,又有锁的问题,而且对方也未必需要该对象,所以此属性建议设为false。如果业务上真的需要设为true时,就可考虑使用Terracotta了。
replicatePuts、replicateUpdates、replicateRemovals 增删改是否同步,默认都为true。但因为我们前面选择了失效算法,所以replicatePuts 要设为false。
所以我们一般的设置如下:
<cache name="org.springside.examples.miniweb.entity.user.User" maxElementsInMemory="500" overflowToDisk="true"
eternal="true">
<cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=false,replicatePuts=false,replicateUpdatesViaCopy=false" />
</cache>
3.4 Shutdown
在分布式环境或持久化硬盘时,需要调用CacheManager的shutdown操作,Hibernate会自动shutdown它自己的cacheManager,如果在hibernate之外使用,你需要增加:
<listener>
<listener-class>net.sf.ehcache.constructs.web.ShutdownListener</listener-class>
</listener>
4.JMS式并发同步
与其他同步方式相比,JMS同步支持了非Cache节点的程序对Cahce的修改。
在分布式缓存中有一种需求:应用节点更改数据库数据后,需要通知所有缓存集群的节点,通常大家都是自行通过JMS实现的,而Ehcache的JMS Replicator 提供了一种标准的方案,提供PUT,REMOVE,REMOVE_ALL的标准操作。
分享到:
相关推荐
EHCache缓存的说明文档是到处找来的内容,都有参考链接指向原地址。有三个测试项目也在里面:一个整合了Struts2或Hibernate,一个整合了MyBatis3,这两个是我做的;另一个ehcachetest是下载了別人的。
### JavaWeb中Ehcache缓存配置详解 在JavaWeb应用开发中,缓存技术扮演着至关重要的角色,它能够显著提升应用性能和响应速度,减少数据库负担。Ehcache作为一款广泛使用的开源缓存解决方案,其高效、灵活的特性受到...
接下来,我们将详细讨论Ehcache的基本配置、缓存操作、与Spring和Hibernate的集成,以及相关的配置说明。 1. Ehcache基本配置 Ehcache的配置主要通过`ehcache.xml`文件进行。在该文件中,你可以定义多个缓存区域...
本工程用于研究如何借助Ehcache缓存框架实现对页面的缓存 本工程编码方式:UTF-8 本工程开发工具:MyEclipse 说明: 1、ehcache.xml和ehcache.xsd两个文件可以在下在下载下来的名为“ehcache-core-x.x.x-...
1、基于SpringBoot+Layui+shiro安全框架和Ehcache缓存框架搭建的学生管理系统源码+项目说明.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末...
EhCache是一个开源的、高性能的Java分布式缓存系统,常用于提高应用程序的性能和响应速度,尤其是在处理大量数据时。在集群环境中使用EhCache,可以实现数据的共享和一致性,有效减轻数据库的压力。本篇文章将深入...
在进行Ehcache缓存开发时,首先需要搭建环境,包括导入ehcache的jar包、依赖的slf4j、ehcache配置文件以及log4j的配置文件。配置文件一般默认放置在classpath根目录下。 开发第一个缓存程序的步骤包括创建...
**Ehcache缓存技术详解** Ehcache是一款开源、基于Java的缓存解决方案,它在内存中存储数据,以提高应用程序的性能和响应速度。Ehcache的主要目标是为那些需要频繁读取数据但又不希望每次都进行数据库查询的应用...
在本文中,我们将深入探讨Ehcache的功能实现以及如何与Spring框架进行集成,同时通过两个项目实例——`TestEhcacheSpring.zip`和`TestEhcache.zip`来具体说明。 ### Ehcache核心功能 1. **缓存管理**: Ehcache允许...
以下是对EhCache框架的一些关键知识点的详细说明: 1. **缓存概念**: 缓存是一种临时存储经常访问的数据的技术,目的是减少数据的获取时间。EhCache是基于内存的缓存解决方案,支持本地和分布式缓存。 2. **核心...
Ehcache是一款流行的Java缓存框架,用于提高应用程序性能,减少对数据库的访问频率,从而降低系统的整体负载。v3.10.8是Ehcache的一个特定版本,它提供了许多增强的功能和优化,适用于各种Java应用场合。 Ehcache 3...
2)Demo 导入说明: 1.Eclipse Encoding:GBK 2.Eclipse 导入后可能需要在 Xml Catalog 手动添加:ehcache-spring-1.2.xsd(ehcache-spring-annotations-1.2.0-sources.jar里面有,自己找下)。 3.内附Oracle建表等...
- **文档目的**:旨在帮助读者深入了解和掌握Ehcache缓存技术,适用于所有对缓存技术感兴趣的技术人员。 - **文档范围**:覆盖了Ehcache的基础概念、配置方法、应用场景,特别是页面级别的缓存处理以及在分布式集群...
【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、...
Ehcache是一个流行的Java缓存框架,用于提高应用程序性能,减少对数据库的访问频率,从而降低系统的整体负载。它的最新版本v3.9.2提供了更高效、更易用的特性,适合各种规模的项目。在深入理解Ehcache之前,我们需要...
Ehcache 是一个广泛使用的 Java 分布式缓存,适用于一般目的的缓存、Java EE 和轻量级容器。它提供内存和磁盘存储、复制与失效、监听器、缓存加载器、缓存扩展、缓存异常处理器、Gzip 缓存过滤器等功能,极大地增强...
Ehcache是一个流行的Java缓存框架,用于提高应用程序性能,减少对数据库的访问频率,从而降低系统的整体负载。它在Java开发中广泛使用,尤其是在大数据量处理和高性能应用中。Ehcache v3.10.8是该框架的一个特定版本...
【ehcache】是一个轻量级的缓存框架,它在1.2版本之后就开始支持集群模式,同时是Hibernate默认的缓存提供者。Ehcache完全用Java编写,设计为进程内的缓存框架,具有快速、简洁的特点。它可以单独使用,也可以与...
标题“Ehcache远程复制”涉及的知识点主要围绕Ehcache缓存技术中的远程复制机制。Ehcache是Java平台上广泛使用的缓存系统,它支持多种类型的缓存操作,其中包括了远程复制特性。远程复制可以确保在分布式系统中的...
总的来说,"ehcache-1.2.3 ejb3-persistence"这个资源包旨在提供一个集成Ehcache缓存功能的EJB3应用实例,帮助开发者理解和实践这种高性能缓存技术在企业级Java应用中的应用。通过学习和使用这个资源,开发者能够...