`

EHCache 初步使用指南

 
阅读更多
Ehcache详细解读 http://raychase.iteye.com/blog/1545906,可以了解更多的之知识。

EhCache 的主要特性有:
快速;
简单;
多种缓存策略;
缓存数据有两级:内存和磁盘,因此无需担心容量问题;
缓存数据会在虚拟机重启的过程中写入磁盘;
可以通过 RMI、可插入 API 等方式进行分布式缓存;
具有缓存和缓存管理器的侦听接口;
支持多缓存管理器实例,以及一个实例的多个缓存区域;
提供 Hibernate 的缓存实现;
等等 …
由于 EhCache 是进程中的缓存系统,一旦将应用部署在集群环境中,每一个节点维护各自的缓存数据,当某个节点对缓存数据进行更新,这些更新的数据无法在其它节点中共享,这不仅会降低节点运行的效率,而且会导致数据不同步的情况发生。

在ehcache中,缓存有2个失效相关的配置即 timeToLiveSeconds 和 timeToIdleSeconds , 在通常的解释中,
前者表示一条缓存自创建时间起多少秒后失效,
后者表示一条缓存自最后读取或更新起多少秒失效。

在2个同时配置时可能时间计算就不那么简单了。 简单说来 任何一方为0,则以另一方时间为准。否则就以最短时间为准。 

ehcache是这样计算失效时间的
1 如果 timeToIdleSeconds 不为0并且 timeToLiveSeconds 为0, 如果缓存未被读过,失效时间=timeToIdleSeconds
2 如果 timeToLiveSeconds 不为0,失效时间= timeToLiveSeconds +读取时间
3 否则 失效时间=min(timeToIdleSeconds, timeToLiveSeconds +读取时间)

这两个参数很容易误解,看文档根本没用,我仔细分析了ehcache的代码。结论如下:
1、timeToLiveSeconds的定义是:以创建时间为基准开始计算的超时时长;
2、timeToIdleSeconds的定义是:在创建时间和最近访问时间中取出离现在最近的时间作为基准计算的超时时长;
3、如果仅设置了timeToLiveSeconds,则该对象的超时时间=创建时间+timeToLiveSeconds,假设为A;
4、如果没设置timeToLiveSeconds,则该对象的超时时间=max(创建时间,最近访问时间)+timeToIdleSeconds,假设为B;
5、如果两者都设置了,则取出A、B最少的值,即min(A,B),表示只要有一个超时成立即算超时。
Ehcache 中ehcache.xml 配置详解和示例
http://www.360doc.com/content/11/0525/19/4154133_119352895.shtml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
 <!--timeToIdleSeconds 当缓存闲置n秒后销毁 -->
 <!--timeToLiveSeconds 当缓存存活n秒后销毁 -->
 <!-- 
 缓存配置
       name:缓存名称。
       maxElementsInMemory:缓存最大个数。
       eternal:对象是否永久有效,一但设置了,timeout将不起作用。
       timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
       timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
       overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
       diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
       maxElementsOnDisk:硬盘最大缓存个数。
       diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
       diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
       memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
       clearOnFlush:内存数量最大时是否清除。
 -->
 <diskStore path="java.io.tmpdir" />
 <defaultCache 
  maxElementsInMemory="500" 
  eternal="false" 
  timeToIdleSeconds="300" 
  timeToLiveSeconds="1200" 
  overflowToDisk="true" />
    <cache name="com.Menu" maxElementsInMemory="150" eternal="false" timeToLiveSeconds="36000" timeToIdleSeconds="3600" overflowToDisk="true"/> 
</ehcache>


EHCache 初步使用指南
http://nakata-yf.iteye.com/blog/23536
1. EHCache 的特点,系统要求及安装
是一个纯Java ,过程中(也可以理解成插入式)缓存实现
Hibernate2.1,Spring支持EHcache嵌入,自我感觉Hibernate2.1 + EHCache 很过瘾。。(测试结果比Hibernate+JCS 好多了)
支持多CPU服务器
其版本发布前进行了产品级测试
支持:运行环境jdk1.2到5版本(源代码编译需1.4或1.5 版本)
jdk1.4和1.5 版本,需加入apache 的 commons-logging类库 http://jakarta.apache.org/commons/logging.html
jdk1.2和1.3 版本,需加入commons-collections 2.1 版本 http://jakarta.apache.org/commons/collections.html
和 xerces (xml-apis.jar and xercesImpl.jar), 2.5 版本 http://xml.apache.org/xerces2-j/

如果运行环境为IBM JDK1.4版本上的IBM Websphere 5.1,也需加入 commons-collections 类库(如需要)

单独安装Ehcache ,需把ehcache-X.X.jar 和相关类库方到classpath中。
如项目已安装了Hibernate2.1 ,则不需要做什么。。直接可以使用Ehcache

Cache 存储方式 :内存或磁盘

2. 单独使用 EHCache

使用CacheManager 创建并管理Cache
使用默认配置文件创建
CacheManager manager = CacheManager.create(); 

使用指定配置文件创建
CacheManager manager = CacheManager.create("src/config/ehcache.xml"); 

从classpathq找寻配置文件并创建
URL url = getClass().getResource("/anothername.xml"); 
CacheManager manager = CacheManager.create(url); 

通过输入流创建
InputStream fis = new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath()); 
 try { 
   manager = CacheManager.create(fis); 
 } finally { 
   fis.close(); 
} 


卸载CacheManager ,关闭Cache
manager.shutdown(); 


使用Caches

取得配置文件中预先 定义的sampleCache1设置,生成一个Cache
Cache cache = manager.getCache("sampleCache1"); 



设置一个名为test 的新cache,test属性为默认
CacheManager manager = CacheManager.create(); 
manager.addCache("test"); 


设置一个名为test 的新cache,并定义其属性
CacheManager manager = CacheManager.create(); 
Cache cache = new Cache("test", 1, true, false, 5, 2); 
manager.addCache(cache); 



往cache中加入元素
Element element = new Element("key1", "value1"); 
cache.put(new Element(element);



从cache中取得元素
Element element = cache.get("key1"); 




3. 在 Hibernate 中运用EHCache

hibernate.cfg.xml中需设置如下:
2.1版本加入
net.sf.ehcache.hibernate.Provider
2.1以下版本加入
net.sf.hibernate.cache.EhCache

在 Hibernate 映射文件的每个需要Cache的Domain中

name="com.somecompany.someproject.domain.Country"
table="ut_Countries"
dynamic-update="false"
dynamic-insert="false"
>;
...


加入类似如下格式信息:

比如:


然后在ehcache.xml中加入

maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
overflowToDisk="false"
/>

API也挺简单,如下的api:
    CacheManager主要的缓存管理类,一般一个应用为一个实例,如下
    CacheManager.create();也可以使用new CacheManager的方式创建
     默认的配置文件为ehcache.xml文件,也可以使用不同的配置:  
CacheManager manager = new CacheManager("src/config/other.xml");
 
   

缓存的创建,采用自动的方式
CacheManager singletonManager = CacheManager.create();  
singletonManager.addCache("testCache");  
Cache test = singletonManager.getCache("testCache"); 
    

或者直接创建Cache
CacheManager singletonManager = CacheManager.create();  
Cache memoryOnlyCache = new Cache("testCache", 5000, false, false, 5, 2);  
manager.addCache(memoryOnlyCache);  
Cache test = singletonManager.getCache("testCache"); 
    

删除cache
CacheManager singletonManager = CacheManager.create();  
singletonManager.removeCache("sampleCache1");
   
 

在使用ehcache后,需要关闭
CacheManager.getInstance().shutdown() 
    
 
caches 的使用   
Cache cache = manager.getCache("sampleCache1"); 
     


执行crud操作
Cache cache = manager.getCache("sampleCache1");  
Element element = new Element("key1", "value1");  
cache.put(element); 
    
 
update    
Cache cache = manager.getCache("sampleCache1");  
cache.put(new Element("key1", "value1");  
//This updates the entry for "key1"  
cache.put(new Element("key1", "value2"); 
    
 
get Serializable  
Cache cache = manager.getCache("sampleCache1");  
Element element = cache.get("key1");  
Serializable value = element.getValue();  
   
 
get non serializable    
Cache cache = manager.getCache("sampleCache1");  
Element element = cache.get("key1");  
Object value = element.getObjectValue(); 
    
 
remove   
Cache cache = manager.getCache("sampleCache1");  
Element element = new Element("key1", "value1"  
cache.remove("key1"); 
    


不过缓存还是基本上以配置方式为主
分享到:
评论

相关推荐

    Ehcache参考指南(英文版).pdf

    **Ehcache简介** Ehcache是一款开源的、高性能的Java缓存框架,它被广泛应用于J2EE环境中,以...在实际项目中,结合Ehcache的文档,例如“Ehcache参考指南(英文版).pdf”,可以帮助开发者更深入地了解和应用Ehcache。

    EHCache的使用随记

    **EHCache的使用随记** EHCache是一款广泛应用于Java环境中的高效、易用且功能丰富的内存缓存系统。它能够显著提升应用性能,通过将常用数据存储在内存中,避免了反复从数据库读取,降低了I/O延迟。本文将探讨...

    cache/ehcache缓存使用

    本文将详细讲解"cache/ehcache缓存使用"的相关知识点,包括缓存的基本概念、Ehcache的介绍、以及如何在Java应用中使用Ehcache进行缓存操作。 首先,我们要理解什么是缓存。缓存是一种存储技术,它临时存储常用或...

    ehcache配置使用详解

    ### ehcache配置使用详解 #### 一、ehcache概述与特性 **背景介绍:** 缓存作为提升系统响应速度和降低数据库压力的关键技术,在现代软件架构中占据着重要位置。ehcache,作为一款高性能的开源Java缓存框架,旨在...

    Spring与ehcache结合使用

    ### Spring与ehcache结合使用详解 #### 一、前言 在现代软件开发中,缓存技术被广泛应用于提高应用程序的性能。其中,Spring框架因其灵活性和强大的功能,在Java领域得到了广泛应用;而ehcache作为一款高性能、...

    ehcache使用详解

    **Ehcache 使用详解** Ehcache 是一个广泛使用的开源Java缓存库,它提供了内存和磁盘存储的二级缓存机制,以提高...在阅读`ehcache使用文档e.doc`后,你将对Ehcache有更深入的理解,并能自如地将其应用到你的项目中。

    EhCache使用详解

    EhCache使用详解,HIBERNATE缓冲

    ehCache 使用例子

    默认情况下,ehCache使用LRU策略。 5. **缓存过期策略**:通过设置`&lt;cache&gt;`元素的`timeToLiveSeconds`和`timeToIdleSeconds`属性,可以控制缓存在创建后多长时间内有效或者在未被访问多长时间后过期。 6. **...

    EHCache的使用

    ### EHCache的使用详解 #### 一、EHCache概述与特点 EHCache 是一款非常流行的开源缓存组件,由 SourceForge 提供支持。作为一个纯 Java 实现的高性能缓存库,EHCache 在处理高并发场景下表现优异。其主要特点包括...

    ehcache使用,以及集群配置

    **Ehcache 使用详解与集群配置** Ehcache 是一个广泛使用的开源Java缓存系统,它提供了内存和磁盘存储,以及对缓存数据的分布式处理能力。在Java应用程序中,Ehcache能够显著提高性能,减少数据库负载,通过缓存...

    ehcache3-samples, 关于使用 Ehcache 3,一些示例/教程.zip

    ehcache3-samples, 关于使用 Ehcache 3,一些示例/教程 Ehcache示例这里知识库包含有关 Ehcache 3用法的示例和教程。示例'basic'演示 Ehcache 3的基本配置和用法'集群'- 演示如何在Terracotta服务器上使用分布式缓存...

    spring2.5整合ehcache2.0使用

    Ehcache是一款广泛使用的开源Java缓存解决方案,而Spring框架则为它提供了一个方便的集成层,使得我们可以在不修改核心业务代码的情况下轻松地添加缓存功能。 首先,我们需要在项目中引入Ehcache和Spring的相关依赖...

    spring3.2+ehcache 注解使用

    在本文中,我们将深入探讨如何在Spring 3.2框架中使用Ehcache注解进行缓存管理。Ehcache是一种流行的Java缓存解决方案,它能够显著提高应用程序的性能,尤其是在处理频繁读取但更新不频繁的数据时。Spring 3.2引入了...

    Spring Boot的EhCache缓存使用.docx

    在Spring Boot的主配置类上添加`@EnableCaching`注解,并通过`spring.cache.type=ehcache`属性指定使用EhCache作为缓存提供者。 4. **更新配置**: 如果有自定义的`CacheManager`配置,需要在配置类中添加`@...

    Ehcache 简单的监控

    通过这些示例,我们可以学习如何设置Ehcache的分布式特性,例如使用Terracotta服务器进行集群缓存,以及如何处理分布式环境下的缓存一致性问题。 总结来说,Ehcache的监控涉及了多个方面,包括但不限于使用JMX、Web...

    Ehcache分布式缓存与其在spring中的使用

    总结来说,Ehcache是一款功能强大且易于使用的缓存解决方案,它不仅能够有效地提升单机应用的性能,还能够在分布式环境下通过灵活的配置实现数据的一致性。在实际应用中,结合Spring框架,可以极大地简化缓存管理的...

    spring3整合EhCache注解实例

    spring3整合EhCache注解实例

Global site tag (gtag.js) - Google Analytics