`
bat0906
  • 浏览: 27960 次
  • 性别: Icon_minigender_1
  • 来自: 第九天堂
社区版块
存档分类
最新评论

EhCache使用说明

 
阅读更多

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,
是Hibernate中默认的CacheProvider。

ehcache是一个非常轻量级的缓存实现,而且从1.2之后就支持了集群,
而且是hibernate默认的缓存provider。
 
Ehcache的分布式缓存有传统的RMI,1.5版的JGroups,1.6版的JMS。
分布式缓存主要解决集群环境中不同的服务器间的数据的同步问题。
 
使用Spring的AOP进行整合,可以灵活的对方法的返回结果对象进行缓存。
 
CachingFilter功能可以对HTTP响应的内容进行缓存。
 
1、主要特性
     1. 快速.
     2. 简单.
     3. 多种缓存策略
     4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
     5. 缓存数据会在虚拟机重启的过程中写入磁盘
     6. 可以通过RMI、可插入API等方式进行分布式缓存
     7. 具有缓存和缓存管理器的侦听接口
     8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
     9. 提供Hibernate的缓存实现
 
=======================================
Cache 存储方式 :内存或磁盘

1. EHCache 的特点,是一个纯Java ,过程中(也可以理解成插入式)缓存实现,单独安装Ehcache
需把ehcache-X.X.jar 和相关类库方到classpath中。如项目已安装了Hibernate ,则不需要做什么。。直接可以使用Ehcache


使用:
1.创建CacheManager有4种方式
  A.使用默认配置文件创建
     CacheManager manager = CacheManager.create();
  B.使用指定配置文件创建
     CacheManager manager = CacheManager.create("src/config/ehcache.xml");
  C.从classpath中找寻配置文件并创建
     URL url = getClass().getResource("/anothername.xml"); 
  CacheManager manager = CacheManager.create(url);
   D:通过输入流创建
     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设置,通过CacheManager生成一个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");  
 
  所以大概步骤为:
  第一步:生成CacheManager对象
  第二步:生成Cache对象
  第三步:向Cache对象里添加由key,value组成的键值对的Element元素
 
下面是一个具体的例子 
  
  package test;

  import net.sf.ehcache.Cache;
  import net.sf.ehcache.CacheManager;
  import net.sf.ehcache.Element;
  /**
   * 第一步:生成CacheManager对象
   * 第二步:生成Cache对象
   * 第三步:向Cache对象里添加由key,value组成的键值对的Element元素
   * @author mahaibo
   *
   */
  public class Test {
   
   public static void main(String[] args) {
      //指定ehcache.xml的位置
      String fileName="E:\\1008\\workspace\\ehcachetest\\ehcache.xml";
      CacheManager manager = new CacheManager(fileName);
      //取出所有的cacheName
      String names[] = manager.getCacheNames();
      for(int i=0;i<names.length;i++){
       System.out.println(names[i]);
      }
      //根据cacheName生成一个Cache对象
      //第一种方式:
      Cache cache=manager.getCache(names[0]);
     
      //第二种方式,ehcache里必须有defaultCache存在,"test"可以换成任何值
  //    Cache cache = new Cache("test", 1, true, false, 5, 2);  
  //    manager.addCache(cache);
     
      //向Cache对象里添加Element元素,Element元素有key,value键值对组成
      cache.put(new Element("key1","values1"));
      Element element = cache.get("key1");
     
      System.out.println(element.getValue());
      Object obj = element.getObjectValue();
      System.out.println((String)obj);
      manager.shutdown();

    }

  }

==================================================  
  配置文件介绍(普通缓存)
  代码:
  
    <ehcache>
   <!-- 指定一个文件目录,当EHCache把数据写到硬盘上时,将把数据写到这个文件目录下 -->
   <diskStore path="java.io.tmpdir"/>

   <!-- 设定缓存的默认数据过期策略 -->
   <defaultCache
     maxElementsInMemory="10000"
     eternal="false"
     overflowToDisk="true"
     timeToIdleSeconds="0"
     timeToLiveSeconds="0"
     diskPersistent="false"
     diskExpiryThreadIntervalSeconds="120"/>
   
   <!-- 
    设定具体的命名缓存的数据过期策略

    cache元素的属性:
     name:缓存名称
     
     maxElementsInMemory:内存中最大缓存对象数
     
     maxElementsOnDisk:硬盘中最大缓存对象数,若是0表示无穷大
     
     eternal:true表示对象永不过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性,默认为false
     
     overflowToDisk:true表示当内存缓存的对象数目达到了maxElementsInMemory界限后,会把溢出的对象写到硬盘缓存中。注意:如果缓存的对象要写入到硬盘中的话,则该对象必须实现了Serializable接口才行。
     
     diskSpoolBufferSizeMB:磁盘缓存区大小,默认为30MB。每个Cache都应该有自己的一个缓存区。
     
     diskPersistent:是否缓存虚拟机重启期数据
     
     diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认为120秒

     timeToIdleSeconds: 设定允许对象处于空闲状态的最长时间,以秒为单位。当对象自从最近一次被访问后,如果处于空闲状态的时间超过了timeToIdleSeconds属性值,这个对象就会过期,EHCache将把它从缓存中清空。只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地处于空闲状态
     
     timeToLiveSeconds:设定对象允许存在于缓存中的最长时间,以秒为单位。当对象自从被存放到缓存中后,如果处于缓存中的时间超过了 timeToLiveSeconds属性值,这个对象就会过期,EHCache将把它从缓存中清除。只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地存在于缓存中。timeToLiveSeconds必须大于timeToIdleSeconds属性,才有意义

     memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)。
   -->
   <cache name="CACHE1"
       maxElementsInMemory="1000"
       eternal="true"
       overflowToDisk="true"/> 
      
   <cache name="CACHE2"
    maxElementsInMemory="1000"
    eternal="false"
    timeToIdleSeconds="200"
    timeToLiveSeconds="4000"
    overflowToDisk="true"/>
  </ehcache>
  
  
  配置文件介绍(分布式缓存)
  
   1)RMI集群模式
          A、手工发现
               需要指定节点发现模式peerDiscovery值为manual,rmiUrls设置为另一台服务器的IP、端口和缓存名等信息。
     
      <cacheManagerPeerProviderFactory
    class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
    properties="peerDiscovery=manual,
    rmiUrls=//192.168.0.12:4567/oschina_cache|//192.168.0.13:4567/oschina_cache"
   />
 
        B、自动发现
                需要指定节点发现模式peerDiscovery值为automatic自动,同时组播地址可以指定D类IP地址空间,范围从 224.0.1.0 到 238.255.255.255 中的任何一个地址。
 
         <cacheManagerPeerProviderFactory
    class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
    properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,
    multicastGroupPort=4446, timeToLive=32"
   />
 
       需要在每个cache属性中加入
    <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
   
    代码:
    <cache name="demoCache"
    maxElementsInMemory="10000"
    eternal="true"
    overflowToDisk="true">
    <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
    </cache>
   
   
    通过编程方式使用EhCache
   
    代码:
   
      //从classes目录查找ehcache.xml配置文件
   CacheManager cacheManager = CacheManager.getInstance();

   //从classes目录查找指定名称的配置文件
   //CacheManager cacheManager = CacheManager.create(getClass().getResource("/ehcache.xml"));

   //根据配置文件获得Cache实例
   Cache cache = cacheManager.getCache("CACHE1");

   //清空Cache中的所有元素
   cache.removeAll();

   //往Cache中添加元素
   cache.put(new Element("s1", "11111"));
   cache.put(new Element("s2", "22222"));
   cache.put(new Element("s3", "33333"));

   //从Cache中取得元素
   Element e = cache.get("s3");
   System.out.println(e.getValue());

   //卸载缓存管理器
   cacheManager.shutdown();
   
  5.页面缓存 
       在web.xml文件中配置过滤器。此处对test_tag.jsp页面进行缓存。
   
     <filter>
    <filter-name>testPageCachingFilter</filter-name>
    <filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter</filter-class>
   </filter>
   <filter-mapping>
    <filter-name>testPageCachingFilter</filter-name>
    <url-pattern>/test_tag.jsp</url-pattern>
   </filter-mapping>
 
       在ehcache.xml文件中配置Cache节点。注意:cache的name属性必需为SimplePageCachingFilter。
   
    <cache name="SimplePageCachingFilter"
     maxElementsInMemory="10"
     overflowToDisk="true"
     eternal="false"
     timeToIdleSeconds="100"
     timeToLiveSeconds="100"
     memoryStoreEvictionPolicy="LFU" />
    
    
    
========================================================
EHcache注解在Spring 中使用(ehcache-spring-annotations)

第一步在web.xml中配置加载配置ehcache的配置文件,如
<context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:config/applicationContext.xml,classpath:config/ehcacheApplication.xml</param-value> 
 </context-param>
第二部:编写ehcacheApplication.xml
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
    xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">
                                      
    <ehcache:annotation-driven /> 
     
    <ehcache:config cache-manager="cacheManager"> 

    </ehcache:config> 
     
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> 
        <property name="configLocation"  value="classpath:config/ehcache.xml"/> 
    </bean>

  《!--缓存的生成key--》
    <bean id="productKeyGenerator" class="lwz.web.ehcache.ProductCacheKeyGenerator"/>   
     
</beans> 


第三部:ehcache.xml
<?xml version="1.0" encoding="UTF-8"?> 
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"> 
     
    <diskStore path="user.home/web_ehcache/" />  
     
    <defaultCache 
            maxElementsInMemory="3000" 
            eternal="false" 
            timeToIdleSeconds="3600" 
            timeToLiveSeconds="3600" 
            overflowToDisk="true" 
            diskPersistent="false" 
            diskExpiryThreadIntervalSeconds="100" 
            memoryStoreEvictionPolicy="LRU" 
            /> 
    <cache name="testCache" 
           maxElementsInMemory="3000" 
           eternal="false" 
           overflowToDisk="true" 
           timeToIdleSeconds="36000" 
           timeToLiveSeconds="36000" 
           memoryStoreEvictionPolicy="LFU" 
            /> 
</ehcache>  

第四部
然偶在dao的接口,或者类方法上加上@cacheable注解

@Cacheable(cacheName = "testCache")
public List<ApplicationMenu> findAllMenuValid(String flag);
记得最好不要在control类中的方法加上@Cacheable(cacheName = "testCache"),然后在方法内再去调用dao中的方法,这样缓存不到
如果要更新缓存 在方法上注释

@TriggersRemove(cacheName="testCache",removeAll=true)
public void deleteMenu(int id);

即删除缓存

 
 
 
 

分享到:
评论

相关推荐

    EHCache缓存的说明和测试

    EHCache缓存的说明文档是到处找来的内容,都有参考链接指向原地址。有三个测试项目也在里面:一个整合了Struts2或Hibernate,一个整合了MyBatis3,这两个是我做的;另一个ehcachetest是下载了別人的。

    Ehcache使用

    ### Ehcache 使用详解 #### 一、概述 Ehcache 是一款开源的、纯 Java 缓存框架,它能够提供高性能、低延迟的数据缓存功能。Ehcache 的设计目标是提高应用程序性能,通过减少对数据库或其他外部系统的依赖来达到这...

    ehcache的功能实现

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

    Ehcache缓存技术说明

    接下来,我们将详细讨论Ehcache的基本配置、缓存操作、与Spring和Hibernate的集成,以及相关的配置说明。 1. Ehcache基本配置 Ehcache的配置主要通过`ehcache.xml`文件进行。在该文件中,你可以定义多个缓存区域...

    Hibernate+EhCache配置及使用说明详解

    Hibernate+EhCache 配置及使用说明详解 EhCache 是 Hibernate 的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力。 EhCache 的使用注意点: ...

    集群环境中使用_EhCache_缓存系统&Ehcache配置文件的详细说明

    EhCache的特点包括:快速存取、内存管理、支持持久化和缓存过期策略等。在集群环境中,EhCache通过RMI(远程方法调用)或JGroups协议实现节点间的通信,保证了缓存数据的一致性。 二、EhCache在集群环境中的应用 1....

    ehcache介绍与说明.docx

    Ehcache的存储方式分为内存和磁盘两层,因此即使内存满载,数据也能持久化到磁盘,避免了容量限制的问题。在虚拟机重启时,缓存数据会被写入磁盘,保证了数据的持久性。此外,Ehcache还支持通过RMI和插件API进行...

    EHCache 配置说明

    Ehcache 是一个广泛使用的 Java 分布式缓存,适用于一般目的的缓存、Java EE 和轻量级容器。它提供内存和磁盘存储、复制与失效、监听器、缓存加载器、缓存扩展、缓存异常处理器、Gzip 缓存过滤器等功能,极大地增强...

    javaWeb中Ehcache缓存配置说明

    在Ehcache的配置文件中,可以通过一系列参数来精细控制缓存的行为。下面是一些关键配置项及其含义: 1. **`timeToIdleSeconds`** 和 **`timeToLiveSeconds`**:这两个参数用于定义缓存项的有效期限。`...

    ehcache-3.3.1-API文档-中文版.zip

    赠送jar包:ehcache-3.3.1.jar; 赠送原API文档:ehcache-3.3.1-javadoc.jar; 赠送源代码:ehcache-3.3.1-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    ehcache学习文档

    - **文档范围**:覆盖了Ehcache的基础概念、配置方法、应用场景,特别是页面级别的缓存处理以及在分布式集群环境下的配置。 - **读者对象**:面向所有希望学习或进一步提高Ehcache使用技巧的技术人员。 #### 二、...

    EhCache开启gzip压缩功能

    除了EhCache的内置功能,还有其他第三方库或框架如OSCache也提供了gzip压缩的支持,它们可能有不同的配置和使用方式,但原理类似,都是在缓存内容返回给客户端前进行压缩。 值得注意的是,虽然gzip压缩在大部分现代...

    ehcache-2.10.3-distribution.tar.gz

    - `LICENSE`: 许可证文件,说明软件的使用权限和限制。 了解这些内容后,开发者可以根据需求创建和配置自己的Ehcache实例,利用其强大功能优化应用程序的性能。同时,通过阅读帮助文档,可以深入理解Ehcache的工作...

    ehcache 2.10.1

    版本2.10.1是Ehcache的一个重要版本,它提供了多种功能和优化,使得开发人员能够更好地管理和使用缓存。 Ehcache的核心特性包括: 1. **内存管理**:Ehcache使用内存存储来快速访问常用数据,以减少对持久存储(如...

    ehcache-1.2.3 ejb3-persistence

    3. 使用说明或文档:可能包括Ehcache和EJB3整合的指南,帮助开发者理解和使用这两个技术。 4. 测试类或示例项目:演示如何在实际应用中部署和测试Ehcache与EJB3的整合。 总的来说,"ehcache-1.2.3 ejb3-persistence...

    ehcache-3.9.9-API文档-中英对照版.zip

    赠送jar包:ehcache-3.9.9.jar; 赠送原API文档:ehcache-3.9.9-javadoc.jar; 赠送源代码:ehcache-3.9...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    ehcache官方教程

    2. **构建过程**:详细步骤说明如何从源码构建 Ehcache。 #### 四十六、常见问题解答(FAQ) 1. **问题列表**:列出了一些常见的问题。 2. **解答**:提供了这些问题的解答。 以上内容全面覆盖了 Ehcache 的各个...

    ehcache-core-ee-2.4.1 license 授权 注册 算号 keygen

    Terracotta公司是Ehcache的开发者,他们为商业用户提供了一个许可证管理系统,允许用户合法地使用和管理Ehcache的高级特性。此文件可能包含了一个特定的许可证密钥,用于激活和验证Ehcache的使用权限。 "read.txt" ...

    Ehcache远程复制

    提示了“使用复制”、“支持的复制类型”、“复制的最小配置”、“向现有缓存添加复制”、“使用RMI实现复制缓存”、“配置对等提供者”等关键部分,这些部分应该是手册的主体内容,分别阐述了如何实现Ehcache的远程...

Global site tag (gtag.js) - Google Analytics