`
shuai1234
  • 浏览: 972699 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

ehcache简介及配置

    博客分类:
  • java
 
阅读更多
一、java web开发缓存方案,ehcache和redis哪个更好Ehcache
在java项目广泛的使用。它是一个开源的、设计于提高在数据从RDBMS中取出来的高花费、高延迟采取的一种缓存方案。正因为Ehcache具有健壮性(基于java开发)、被认证(具有apache 2.0 license)、充满特色(稍后会详细介绍),所以被用于大型复杂分布式web application的各个节点中。
1. 够快
Ehcache的发行有一段时长了,经过几年的努力和不计其数的性能测试,Ehcache终被设计于large, high concurrency systems.
2. 够简单
开发者提供的接口非常简单明了,从Ehcache的搭建到运用运行仅仅需要的是你宝贵的几分钟。其实很多开发者都不知道自己用在用Ehcache,Ehcache被广泛的运用于其他的开源项目
比如:hibernate
3.够袖珍
关于这点的特性,官方给了一个很可爱的名字small foot print ,一般Ehcache的发布版本不会到2M,V 2.2.3 才 668KB。
4. 够轻量
核心程序仅仅依赖slf4j这一个包,没有之一!
5.好扩展
Ehcache提供了对大数据的内存和硬盘的存储,最近版本允许多实例、保存对象高灵活性、提供LRU、LFU、FIFO淘汰算法,基础属性支持热配置、支持的插件多
6.监听器
缓存管理器监听器 (CacheManagerListener)和 缓存监听器(CacheEvenListener),做一些统计或数据一致性广播挺好用的
搜索如何使用?
够简单就是Ehcache的一大特色,自然用起来just so easy!

redis
redis是在memcache之后编写的,大家经常把这两者做比较,如果说它是个key-valuestore 的话但是它具有丰富的数据类型,我想暂时把它叫做缓存数据流中心,就像现在物流中心那样,order、package、store、classification、distribute、end。现在还很流行的LAMP PHP架构 不知道和 redis+mysql 或者 redis + mongodb的性能比较(听群里的人说mongodb分片不稳定)。
先说说reidis的特性

1. 支持持久化
redis的本地持久化支持两种方式:RDB和AOF。RDB 在redis.conf配置文件里配置持久化触发器,AOF指的是redis没增加一条记录都会保存到持久化文件中(保存的是这条记录的生成命令),如果不是用redis做DB用的话还会不要开AOF ,数据太庞大了,重启恢复的时候是一个巨大的工程!
2.丰富的数据类型
redis 支持 String 、Lists、sets、sorted sets、hashes 多种数据类型,新浪微博会使用redis做nosql主要也是它具有这些类型,时间排序、职能排序、我的微博、发给我的这些功能List 和 sorted set 的强大操作功能息息相关
3.高性能
这点跟memcache很想象,内存操作的级别是毫秒级的比硬盘操作秒级操作自然高效不少,较少了磁头寻道、数据读取、页面交换这些高开销的操作!这也是NOSQL冒出来的原因吧,应该是高性能
是基于RDBMS的衍生产品,虽然RDBMS也具有缓存结构,但是始终在app层面不是我们想要的那么操控的。
4.replication
redis提供主从复制方案,跟mysql一样增量复制而且复制的实现都很相似,这个复制跟AOF有点类似复制的是新增记录命令,主库新增记录将新增脚本发送给从库,从库根据脚本生成记录,这个过程非常快,就看网络了,一般主从都是在同一个局域网,所以可以说redis的主从近似及时同步,同事它还支持一主多从,动态添加从库,从库数量没有限制。 主从库搭建,我觉得还是采用网状模式,如果使用链式(master-slave-slave-slave-slave·····)如果第一个slave出现宕机重启,首先从master 接收 数据恢复脚本,这个是阻塞的,如果主库数据几TB的情况恢复过程得花上一段时间,在这个过程中其他的slave就无法和主库同步了。

5.更新快
这点好像从我接触到redis到目前为止 已经发了大版本就4个,小版本没算过。redis作者是个非常积极的人,无论是邮件提问还是论坛发帖,他都能及时耐心的为你解答,维护度很高。有人维护的话,让我们用的也省心和放心。目前作者对redis 的主导开发方向是redis的集群方向。

所以如果希望简单就用ehcache,如果开发任务比较复杂,希望得到比较多的支持什么的就redis
 
 
 
 
 
 
 
EhCache介绍 
 
 
ehcache是一个非常轻量级的缓存实现,而且从1.2之后就支持了集群,而且是hibernate默认的缓存provider。EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。
 

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的缓存实现
     10. 等等

 

2、配置文件介绍(普通缓存) 

Xml代码 在CODE上查看代码片派生到我的代码片
<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>  
[xml] view plain copy 
<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>  
 

3、配置文件介绍(分布式缓存) 

     1)RMI集群模式

          A、手工发现

               需要指定节点发现模式peerDiscovery值为manual,rmiUrls设置为另一台服务器的IP、端口和缓存名等信息。

Xml代码 在CODE上查看代码片派生到我的代码片
<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"   
/>  
[xml] view plain copy 
<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 中的任何一个地址。

Xml代码 在CODE上查看代码片派生到我的代码片
<cacheManagerPeerProviderFactory  
    class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"  
    properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,   
    multicastGroupPort=4446, timeToLive=32"   
/>  
[xml] view plain copy 
<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"/>

Xml代码 在CODE上查看代码片派生到我的代码片
<cache name="demoCache"  
    maxElementsInMemory="10000"  
    eternal="true"  
    overflowToDisk="true">  
    <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>  
</cache>   
[xml] view plain copy 
<cache name="demoCache"  
    maxElementsInMemory="10000"  
    eternal="true"  
    overflowToDisk="true">  
    <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>  
</cache>   
         

4、通过编程方式使用EhCache

Java代码 在CODE上查看代码片派生到我的代码片
//从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();  
[java] view plain copy 
//从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页面进行缓存。

Xml代码 在CODE上查看代码片派生到我的代码片
<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>  
[xml] view plain copy 
<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。

Xml代码 在CODE上查看代码片派生到我的代码片
<cache name="SimplePageCachingFilter"    
   maxElementsInMemory="10"    
   overflowToDisk="true"    
   eternal="false"    
   timeToIdleSeconds="100"    
   timeToLiveSeconds="100"  
   memoryStoreEvictionPolicy="LFU" />  
[xml] view plain copy 
<cache name="SimplePageCachingFilter"   
   maxElementsInMemory="10"   
   overflowToDisk="true"   
   eternal="false"   
   timeToIdleSeconds="100"   
   timeToLiveSeconds="100"  
   memoryStoreEvictionPolicy="LFU" />  
 

 

分享到:
评论

相关推荐

    ehcache的配置参数详解

    本文将深入探讨ehcache.xml配置文件中的关键参数及其作用,帮助开发者更有效地管理和优化缓存策略。 ### 1. `defaultCache` 标签 `defaultCache` 是ehcache.xml中一个重要的标签,用于定义所有未显式指定缓存策略...

    EHCACHE集群配置-JGroup篇

    EHCAHCE基于JGROUP的集群配置方案,内含相关配置文件,及配置说明

    ehcache基本原理及配置

    **Ehcache配置** Ehcache的配置主要通过XML文件进行,以下是一些关键配置元素: 1. **** 元素: 定义一个具体的缓存实例,包括其名称、大小限制、过期策略等属性。例如: ```xml &lt;!-- additional configuration...

    Ehcache Monitor 安装配置

    在Ehcache Monitor的配置中,"Probe"是一个关键概念,它是一个包含在应用程序中的jar文件和配置,用于收集和发送Ehcache的监控数据。要添加Probe到你的应用程序,你需要在你的`pom.xml`文件中添加Terraform的release...

    ehcache缓存配置详解

    ehcache 缓存配置详解 Ehcache 是一个流行的 Java 缓存框架,提供了强大的缓存机制,帮助开发者提高应用程序的性能和可扩展性。 Ehcache 的配置主要包括 diskstore、defaultCache、cache 三个部分,这三个部分的...

    Ehcache集群环境配置

    #### 一、Ehcache简介 Ehcache 是一款开源的高性能 Java 缓存框架,广泛应用于 Java 应用程序中,以提高应用程序性能。其核心设计采用三层类层次结构,主要包括 CacheManager、Cache 和 Element。 - **...

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

    三、EhCache配置文件详解 EhCache的配置主要通过`ehcache.xml`文件进行。以下是一些关键配置元素: 1. `&lt;cache&gt;`元素:定义一个缓存区域,包括缓存名称、最大元素数、内存和磁盘存储策略等。例如: ```xml ...

    ehcache缓存的配置

    #### 二、ehcache配置文件结构 ehcache 的配置主要通过 XML 文件实现,通常命名为 `ehcache.xml`,放置于项目的类路径(classpath)下。以下是一个典型的 `ehcache.xml` 配置示例: ```xml &lt;ehcache xmlns:xsi=...

    ehcache配置使用详解

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

    ehcache缓存的jar包和配置文件

    2. Ehcache配置: - 配置文件:Ehcache通常使用XML文件进行配置,例如`ehcache.xml`。这个文件定义了缓存管理器、缓存的大小、缓存策略等。 - `&lt;cache&gt;`元素:定义一个缓存,包括其名称、大小限制、过期策略等属性...

    EhCache缓存的配置文件

    EhCache缓存的配置文件

    ehcache配置拦截器缓存页面

    接下来,我们需要创建一个Ehcache配置文件,例如ehcache.xml,定义缓存的属性,如大小、存活时间等。例如: ```xml &lt;config xmlns="http://www.ehcache.org/v3"&gt; &lt;key-type&gt;java.lang.String &lt;value-type&gt;java....

    基于ssm框架配置ehcache

    里面有jar,ssm框架,以及ehcache的配置,照着改成自己的就可以,注意不要用实体类传入参数,不懂的看我博客

    ehcache集群缓存配置

    ehcache提供三种网络连接策略来实现集群,rmi,jgroup还有jms。这里只说rmi方式。同时ehcache可以可以实现多播的方式实现集群。也可以手动指定集群主机序列实现集群,本例应用手动指定。

    Ehcache缓存配置.doc

    本文主要讨论Ehcache的XML配置文件`ehcache.xml`。 首先,`ehcache.xml`是Ehcache的主要配置文件,定义了缓存的行为,如缓存的大小、生命周期和持久化策略。例如,以下是一个`ehcache.xml`片段: ```xml &lt;ehcache&gt;...

    ehcache知识简介

    作为当前最受欢迎的缓存方案之一,Ehcache以其简单的配置、清晰的结构以及强大的功能著称。其最初的知名度来源于作为Hibernate缓存的一部分。本文旨在深入探讨Ehcache的关键特性和实现原理,以便于开发者能够更好地...

    ehcache二级缓存配置文件

    **Ehcache二级缓存配置详解** Ehcache是一个广泛使用的开源Java缓存库,它提供了内存和磁盘存储的缓存解决方案,适用于提高应用程序性能和减少数据库负载。在Java应用中,尤其是在Spring框架中,Ehcache常被用作二...

    ehcache使用,以及集群配置

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

    springmvc4+spring4+hibernate5.1.3+二级缓存ehcache+fastjson配置

    在实际应用中,开发者需要根据项目需求调整这些配置,例如设置数据库连接参数、配置Ehcache缓存策略、定义SpringMVC的拦截器和视图解析器等。此外,还需要确保所有的依赖库已正确导入,以便项目能够顺利运行。这样的...

    ehcache.xsd_ehcache.xml代码提示.rar

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

Global site tag (gtag.js) - Google Analytics