`

EHCache 配置详解

    博客分类:
  • J2EE
阅读更多

 

EHCache 是一个纯java 的在进程中的缓存, 它具有以下特性: 快速, 简单,Hibernate2.1 充当可插入的缓存, 最小的依赖性, 全面的文档和测试. 官方网站http://ehcache.sourceforge.net/

毫 无疑问, 几乎所有的网站的首页都是访问率最高的, 而首页上的数据来源又是非常广泛的, 大多数来自不同的对象, 而且有可能来自不同的db , 所以给首页做缓存是一个不错的主意, 那么主页的缓存策略是什么样子的呢, 我认为应该是某个固定时间之内不变的, 比如说2 分钟更新一次. 那么这个缓存应该做在什么地方呢, 让我们来看一下, 假设您的应用的结构是page-filter-action-service-dao- db , 这个过程中的- 的地方都是可以做缓存的地方, 根据页面缓存的特征, 应该把页面缓存做到尽量靠近客户的地方, 就是在page filter 之间, 这样的优点就是第一个用户请求之后, 页面被缓存, 第二个用户再来请求的时候, 走到filter 这个请求就结束了, 无需再走后面的action-service-dao-db . 带来的好处是服务器压力的减低和客户段页面响应速度的加快.

那么我们来看一下如何使用ehcache 做到这一点.

在使用ehcache 的页面缓存之前, 我们必须要了解ehcache 的几个概念,

1 timeToIdleSeconds , 多长时间不访问该缓存, 那么ehcache 就会清除该缓存.

2 timeToLiveSeconds , 缓存的存活时间, 从开始创建的时间算起.

首 页的页面缓存的存活时间, 我们定的是2 分钟,timeToLiveSeconds 应该设置为120 , 同时我们的timeToIdleSeconds 最好也设置为2 分钟, 或者小于2 分钟. 我们来看一下下面这个配置, 这个配置片段应该放到ehcache.xml :

<cache name= "SimplePageCachingFilter"

maxElementsInMemory = "10"

maxElementsOnDisk = "10"

eternal = "false"

overflowToDisk = "true"

diskSpoolBufferSizeMB = "20"

timeToIdleSeconds = "10"

timeToLiveSeconds = "10"

memoryStoreEvictionPolicy = "LFU"

/>

SimplePageCachingFilter 是缓存的名字,maxElementsInMemory 表示内存中SimplePageCachingFilter 缓存中元素的最大数量为10 ,maxElementsOnDisk 是指持久化该缓存的元素到硬盘上的最大数量也为10 ,eternal=false 意味着该缓存会死亡.overflowToDisk=true 意思是表示当缓存中元素的数量超过限制时, 就把这些元素持久化到硬盘, 如果overflowToDisk false , 那么maxElementsOnDisk 的设置就没有什么意义了.memoryStoreEvictionPolicy=LFU 是指按照缓存的hit 值来清除, 也就是说缓存满了之后, 新的对象需要缓存时, 将会将缓存中hit 值最小的对象清除出缓存, 给新的对象腾出地方来了( 文章最后有ehcache 中自带的3 种缓存清空策略的介绍).

SimplePageCachingFilter 的配置,

<filter>

<filter-name> indexCacheFilter </filter-name>

<filter-class>

net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter

</filter-class>

</filter>

<filter-mapping>

<filter-name> indexCacheFilter </filter-name>

<url-pattern> *index.action </url-pattern>

</filter-mapping>

就只需要这么多步骤, 我们就可以给某个页面做一个缓存的, 把上面这段配置放到你的web.xml , 那么当你打开首页的时候, 你会发现,2 分钟才会有一堆sql 语句出现在控制台上. 当然你也可以调成5 分钟, 总之一切都在控制中.

好了, 缓存整个页面看上去是非常的简单, 甚至都不需要写一行代码, 只需要几行配置就行了, 够简单吧, 虽然看上去简单, 但是事实上内部实现却不简单哦, 有兴趣的话, 大家可以看看SimplePageCachingFilter 继承体系的源代码.

上面的配置针对的情况是缓存首页的全部, 如果你只想缓存首页的部分内容时, 你需要使用SimplePageFragmentCachingFilter 这个filter . 我们看一下如下片断:

<filter>

<filter-name> indexCacheFilter </filter-name>

<filter-class>

net.sf.ehcache.constructs.web.filter.SimplePageFragmentCachingFilter

</filter-class>

</filter>

<filter-mapping>

<filter-name> indexCacheFilter filter-name>

<url-pattern> */index_right.jsp </url-pattern>

</filter-mapping >

这个jsp 需要被jsp:include 到其他页面, 这样就做到的局部页面的缓存. 这一点貌似没有oscache tag 好用.

事 实上在cachefilter 中还有一个特性, 就是gzip , 也就是说缓存中的元素是被压缩过的, 如果客户浏览器支持压缩的话,filter 会直接返回压缩过的流, 这样节省了带宽, 把解压的工作交给了客户浏览器, 如果客户的浏览器不支持gzip , 那么filter 会把缓存的元素拿出来解压后再返回给客户浏览器( 大多数爬虫是不支持gzip , 所以filter 也会解压后再返回流), 这样做的优点是节省带宽, 缺点就是增加了客户浏览器的负担( 但是我觉得对当代的计算机而言, 这个负担微乎其微).

好了, 如果你的页面正好也需要用到页面缓存, 不防可以考虑一下ehcache , 因为它实在是非常简单, 而且易用.

总 结:ehcache 是一个非常轻量级的缓存实现, 而且从1.2 之后就支持了集群, 目前的最新版本是1.3 , 而且是hibernate 默认的缓存provider . 虽然本文是介绍的是ehcache 对页面缓存的支持, 但是ehcache 的功能远不止如此, 当然要使用好缓存,JEE 中缓存的原理, 使用范围, 适用场景等等都需要有比较深刻的理解, 这样才能用好缓存, 用对缓存.

ehcache 中缓存的3 种清空策略:

1 FIFO ,first in first out , 这个是大家最熟的, 先进先出, 不多讲了

2 LFU , Less Frequently Used , 就是上面例子中使用的策略, 直白一点就是讲一直以来最少被使用的. 如上面所讲, 缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存.

2 LRU ,Least Recently Used , 最近最少使用的, 缓存的元素有一个时间戳, 当缓存容量满了, 而又需要腾出地方来缓存新的元素的时候, 那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存.

简介

Ehcache 俩中缓存机制:

· MemoryStore( 内存存储)

· DiskStore( 磁盘存储)

MemoryStore

MemoryStore 总是可用的, 但不可直接操作, 当中存储着所有的Cache.

· 合适的Element 类型

所有的Element 都可以放在MemoryStore.

· 安全性: 使用多个线程并行检查内存泄露.

· JDK: 使用了JDK1.5LinkedHashMap 来存放Elemen.t

· 快速的: 是最快的缓存机制, 因为它是存放在内存中.

· 失效策略(Memory)

Cache 可以配置最大缓存Element 的个数, 以及失效时间. 如果在添加Elemtent, 缓存中的Element 个数达到了最大缓存数并且 overflowToDisk 配置的属性为true,Ehcache 会更具配置项MemoryStoreEvictionPolicy 的失效策略将 Element 输出到磁盘. 如果overflowToDiskfasle,Ehcache 将删除内存中Element.Ehcache 支持三种失效策 略:LRU,LFU,FIFO.

值得注意的是缓存中失效的Element 并不会别马上清理掉, 所以想得到内存的真实大小应该调用方法calculateInMemorySize() 方法.

DiskStore

DiskStore 可缓存到外部设备上( 硬盘).

· DiskStores are Optional

Ehcache1.5 版本开始支持DiskStore. 如果你需要多个DiskStore 的话, 最好给他们配置不同的文件路径.

· 关闭磁盘缓存: 只要注释掉ehcache.xml 配置文件中的磁盘缓存配置项即可.ehcache-failsafe.xml 的磁盘缓存配置不会影响到你自己的cache.

· 合适的Element 类型

这里要注意要想使用磁盘缓存, 缓存的Element 必须实现序列化接口. 否则会抛出NotSerializableException 异常.

· 存储:Ehcache 会将每个缓存配置的文件路径下创建一个cache_name.data 文件, 如果使用的磁盘持久化技术, 还会生成一个cache name.index 文件.

· 失效

Ehcache 有一个后台线程专门做Ellment 失效监测以及清除工作. 设置线程运行间隔时间, 可通过设置diskExpiryThreadIntervalSeconds 属性来完成, 此值不宜设置过低, 否则会导致清理线程占用大量CPU 资源. 默认值是120.

· 持久化

持 久化可在ElementdiskPersistent 配置项中配置, 如果配置为"false" 或是"omitted"CacheManager shutdown 或是startup, 用来缓存Element 的文件将被清除掉. 如果设置为"true",dataindex 文件会被保存下来, 对于 新创建的CacheManager Element 也是可用的.

使用时必须显示调用cache. Flush() 才会将数据缓存到磁盘中.

磁盘缓存步骤:MemoryStore 中把没有失效的Element 刷新到DiskStore,Element 被写入到data 文件,Element 将被序列化到index 文件.

Ehcache 缓存回收策略

缓 存回收就是当缓存满了的时候,Ehcache 会根据指定的策略来清理缓存. 这里的缓存回收策略有别与Ehcache 中的失效清理策略. 失效清理策略是对失 效的Element 进行批量清理时所采用的策略, 最终所有失效的Element 都将被清理, 只不过是清理的先后顺序不同罢了.Ehcache 中缓存的最大 Element 数是由maxElementsInMemory 来指定的. 当缓存中的Element 个数达到maxElementsInMemory 指定的 值时,Ehcache 会根据具体的策略来清理缓存, 默认的策略是LRU( 最近最少使用).

磁盘缓存大小默认是没有限制的, 不过可通过maxElementsOnDisk 来指定. 当磁盘缓存达到maxElementsOnDisk 指定的值时,Ehcache 会清理磁盘中的缓存使用默认策略是LFU( 使用频率最低).

Make sure you are using a supported Java version.
Place the Ehcache jar into your classpath.
Ensure that any libraries required to satisfy dependencies are also in the classpath.
Configure ehcache.xml and place it in your classpath.
Optionally, configure an appropriate logging level.

Downloads: http://sourceforge.net/projects/ehcache/files/

Welcome to ehcache:http://ehcache.org/

 

分享到:
评论

相关推荐

    ehcache的配置参数详解

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

    ehcache配置使用详解

    #### 三、ehcache配置详解 **1. 运行时配置的优点:** - **统一管理**:集中配置所有Cache,方便调整缓存策略和资源分配。 - **动态调整**:发布后可根据实际运行情况调整缓存配置,无需重新编译代码。 **2. 缓存...

    ehcache缓存配置详解

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

    ehcache使用详解

    **Ehcache 使用详解** Ehcache 是一个广泛使用的开源Java缓存库,它提供了内存和磁盘存储的二级缓存机制,以提高应用程序的性能和响应速度。Ehcache 被设计为轻量级且易于集成到各种Java应用程序中,支持分布式缓存...

    EHCache配置

    **EHCache配置详解** EHCache是一款广泛应用于Java环境中的开源分布式缓存系统,它能够显著提升应用程序的性能和响应速度,特别是在数据访问密集型的应用场景中。本文将深入探讨EHCache的配置细节,帮助开发者更好...

    ehcache缓存的配置

    #### 四、ehcache配置详解 - **内存与硬盘缓存**:通过 `maxElementsInMemory` 和 `maxElementsOnDisk` 属性来控制缓存在内存和硬盘上的最大条目数量,这有助于管理缓存资源的使用,避免占用过多内存或磁盘空间。 - ...

    ehcache技术详解

    #### 配置详解 `ehcache.xml` 文件示例: ```xml &lt;ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"&gt; ...

    初学ehcache,3分钟搞定。

    #### 二、ehcache配置详解 根据给定的部分内容中的`ehcache.xml`配置示例,我们可以深入探讨其各项参数的意义及作用: 1. **`defaultCache`**:这是ehcache默认的缓存配置,当没有为特定缓存指定配置时,将使用此...

    细谈Ehcache页面缓存的使用

    #### 三、Ehcache配置详解 在使用Ehcache进行页面缓存时,需要对缓存配置文件进行合理的设置,以满足不同场景的需求。下面是一些关键的配置项及其含义: - **`maxElementsInMemory`**:指定缓存在内存中的最大元素...

    Ehcache2缓存区配置详解.pdf

    ### Ehcache2缓存区配置详解 #### 一、Ehcache概述 Ehcache,一个备受推崇的开源高速缓存系统,专为提升应用程序性能、减轻数据库负担及简化应用扩展设计。其卓越的稳定性和丰富的特性使其成为Java领域内最受欢迎...

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

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

    ehcache缓存框架

    #### 二、Ehcache配置详解 Ehcache主要通过XML配置文件来进行管理,以下是对XML配置文件中关键参数的详细解析: 1. **`&lt;ehcache&gt;`**:根元素,用于包含所有的缓存定义。 2. **`&lt;diskStore path="java.io.tmpdir"/&gt;...

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

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

    EHCache详解_技术文档

    **2.3 ehcache配置文件中元素说明** 在ehcache.xml配置文件中,可以定义多个缓存区域及其配置参数。常见的配置项包括: - `&lt;cache&gt;`:定义一个缓存区域。 - `name`:缓存的名称。 - `maxElementsInMemory`:内存中...

    整合spring 和ehcache

    配置ehcache缓存,存储内存的设置,与spring 的整合等

    ehcache使用,以及集群配置

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

    EHCache技术文档详解.doc

    2.3 EHCACHE配置文件中元素说明 配置文件中包含、、、等元素,分别用于定义缓存、默认缓存参数、磁盘存储设置和事务管理器查找。 2.4 在工程中单独使用 通过CacheManager获取或创建Cache实例,然后添加、检索、更新...

    javaWeb中Ehcache缓存配置说明

    ### JavaWeb中Ehcache缓存配置详解 在JavaWeb应用开发中,缓存技术扮演着至关重要的角色,它能够显著提升应用性能和响应速度,减少数据库负担。Ehcache作为一款广泛使用的开源缓存解决方案,其高效、灵活的特性受到...

Global site tag (gtag.js) - Google Analytics