`
jetway
  • 浏览: 483907 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Ehcache 功能

    博客分类:
  • java
阅读更多

1.Overview

  Ehcache从 Hibernate 发展而来,逐渐涵盖了Cahce界的全部功能,是目前发展势头最好的一个项目。

  标准缓存

  分布式缓存(基于RMI/JGroups/JMS)

  URL,页面片段缓存(类似OSCache的相关部分)

  中央缓存服务器(类似Memcached)

  2.基本功能与配置

  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.jar及源码

    源码库包含所有类的定义、方法实现以及注释,对于深入学习和定制Ehcache功能非常有帮助。 学习Ehcache时,开发者需要理解其配置文件(通常为`ehcache.xml`),其中包含了缓存管理器的配置、缓存的设置等信息。此外...

    基于java的ehcache(Java缓存框架 EhCache).zip

    - 与Guava Cache对比:Guava Cache是Google提供的轻量级缓存,适用于简单场景,而EhCache功能更强大,更适合大型企业应用。 7. 性能优化: - 使用内存管理策略:例如设置内存池、调整缓存大小以优化内存使用。 -...

    ehcache的功能实现

    在本文中,我们将深入探讨Ehcache的功能实现以及如何与Spring框架进行集成,同时通过两个项目实例——`TestEhcacheSpring.zip`和`TestEhcache.zip`来具体说明。 ### Ehcache核心功能 1. **缓存管理**: Ehcache允许...

    ehcache.zip

    ehcache-2.10.6.jar是Ehcache的一个较新版本,它包含了完整的Ehcache功能,包括缓存管理、内存和磁盘存储、缓存复制、缓存加载策略等。这个版本可能包含了一些新的特性、性能优化和错误修复。例如,它可能支持Java 8...

    EhCache开启gzip压缩功能

    2. **EhCache自带的压缩功能**:EhCache自身提供了集成gzip压缩的功能,可以在配置文件中开启。这通常涉及到修改`ehcache.xml`配置文件,设置相应的压缩策略。例如,可以为特定的缓存区域指定压缩策略,或者全局开启...

    ehcache资料

    本文将深入探讨 Ehcache 的核心概念、功能特性以及如何在实际开发中有效利用它。 ### 一、Ehcache 概述 1. **基本概念**:Ehcache 是基于内存的缓存系统,通过存储常用数据,避免了每次请求时都去数据库查询,从而...

    ehcache-spring

    **Ehcache 功能扩展** Ehcache 提供了丰富的特性,如缓存预热、缓存复制、缓存分区、二级缓存等。在实际应用中,可以根据需求选择合适的功能进行配置和使用。例如,通过集群配置实现缓存的高可用性,或者使用 ...

    ehcache.xsd_ehcache.xml代码提示.rar

    【标题解析】:“ehcache.xsd_ehcache.xml代码提示.rar”这个标题表明这是一个与Ehcache缓存系统相关的资源包,主要目的是为Ehcache的配置文件ehcache.xml提供代码提示功能。Ehcache是一个广泛使用的开源Java缓存...

    Ehcache分布式缓存与其在SpringBoot应用

    此外,Ehcache还具备在虚拟机重启后自动将缓存数据持久化到磁盘的功能,确保了数据的可靠性。 在分布式环境中,Ehcache通过使用JGROUP来实现分布式缓存。JGROUP是一个用于构建可靠集群通信的库,可以提供组成员资格...

    Ehcache(一): Spring + Ehcache开场白

    这通常包括ehcache-core或ehcache-spring-annotations库,如果需要分布式缓存功能,还需引入terracotta-ehcache-server或相关的分布式缓存服务。 配置Ehcache,我们可以在Spring的配置文件中定义一个`CacheManager`...

    hibernate+ehcache

    2. **Ehcache**:Ehcache 是一个基于内存的缓存解决方案,支持在 JVM 内部缓存数据,以及可选的分布式缓存功能。它能快速存储和检索数据,提高应用程序性能,尤其适用于高并发场景。 3. **整合 Hibernate 和 ...

    Ehcache 3(ehcache-clustered-3.8.1-kit.zip)

    Ehcache 3 提供了丰富的功能,包括本地内存缓存、磁盘持久化、多线程支持以及在分布式环境中实现集群共享缓存的能力。在"ehcache-clustered-3.8.1-kit.zip"这个压缩包中,我们重点关注的是Ehcache的集群支持版本,这...

    mybatis ehcache 1.0 ehcache.xsd 提示文件

    MyBatis,作为一个流行的Java持久层框架,提供了二级缓存功能,允许开发者选择不同的缓存实现,其中Ehcache是一个常用的选择。本篇文章将详细探讨MyBatis与Ehcache的集成以及`ehcache.xsd`和`ehcache.xml`这两个配置...

    ehcache2.6.5.rar

    然后在MyBatis的配置文件中启用Ehcache,并指定对应的配置文件,从而实现数据缓存功能。通过这样的整合,可以显著提升基于MyBatis的应用程序的性能。 总结来说,Ehcache 2.6.5是一个强大的缓存解决方案,尤其适合...

    ehcache开发工具包

    EhCache是一款高效、易用且功能强大的Java缓存库,它被广泛应用于各种Java应用程序中,以提高数据访问速度并降低数据库负载。EhCache的核心特性包括内存和磁盘存储、缓存分区、过期策略以及缓存同步等。在Java开发中...

    ehcache资料(包含ehcache jar包)

    **Ehcache** 是一个广泛使用的Java缓存库,它为应用程序提供了本地内存缓存功能,以提高数据访问速度和减少数据库负载。Ehcache在处理高并发和大数据量的场景下表现出色,尤其适用于那些频繁读取但不经常修改的数据...

    ehcache配置使用详解

    ### ehcache配置使用详解 ...总之,ehcache不仅是一款功能强大的缓存工具,更是提升应用性能和可扩展性的关键组件。通过深入理解其配置和使用技巧,开发者能够充分发挥ehcache的优势,构建出高效稳定的应用系统。

    EHcache相关jar下载及案例

    在MyBatis中,虽然没有默认的二级缓存实现,但可以通过插件集成EHcache来实现类似的功能。二级缓存可以缓存SQL查询的结果,使得后续相同的查询可以直接从缓存中获取,而不是每次都去数据库查询。 EHcache的核心概念...

    Java缓存框架 EhCache

    EhCache的核心功能包括: 1. **内存管理**:EhCache将数据存储在内存中,提供了对缓存大小的限制,可以设置最大缓存容量,以防止过度消耗内存资源。当缓存满时,可以通过LRU(Least Recently Used)或LFU(Least ...

    ehcache-core-2.6.11.jar

    Ehcache的核心功能包括内存缓存、磁盘缓存、分布式缓存以及缓存管理。内存缓存提供快速的数据访问,而磁盘缓存则用于存储大量或长期的数据。分布式缓存使得多个节点间可以共享和同步数据,增强了系统的可伸缩性。...

Global site tag (gtag.js) - Google Analytics