`
ligf06
  • 浏览: 103087 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Ehcache学习(2)

 
阅读更多

 

4.    Ehcache 页面缓存的配置

4.1.   Ehcache 的类层次模型

主要为三层,最上层的是 CacheManager ,他是操作 Ehcache 的入口。我们可以通过 CacheManager.getInstance() 获得一个单子的 CacheManger ,或者通过 CacheManger 的构造函数创建一个新的 CacheManger 。每个 CacheManager 都管理着多个 Cache 。而每个 Cache 都以一种类 Hash 的方式,关联着多个 Element Element 则是我们用于存放要缓存内容的地方。

4.2.   环境搭建

ehcache-2.1.0-distribution.tar.gz :以及 ehcache-web-2.0.2-distribution.tar.gz 解压得到需要将它们放置到 WEB-INF/lib 下。有一个重要的配置文件 ehcache.xml ,可以从 ehcache 组件包中拷贝一个,也可以自己建立一个。需要放到 classpath 下。常放的路径为 /WEB-INF/classes/ehcache.xml

4.3.   Ehcache 配置文件中元素说明

ehcach.xml 配置文件主要参数的解释 , 其实文件里有详细的英文注释 //DiskStore 配置,

cache 文件的存放目录 ,主要的值有

²   user.home - 用户主目录

²   user.dir - 用户当前的工作目录

²   java.io.tmpdir - Default temp file path 默认的 temp 文件目录

实例:

首先设置 EhCache ,建立配置文件 ehcache.XML,默认的位置在 class- path,可以放

到你的 src 目录下:

<?xml version="1.0" encoding="UTF-8"?

<ehcache

<diskStore path="Java.io.tmpdir"/

<defaultCache

maxElementsInMemory="10000" <!- 缓存最大数目 ->

eternal="false" <!- 缓存是否持久 ->

overflowToDisk="true" <!- 当系统当机时,是否保存到磁盘 ->

timeToIdleSeconds="300" <!- 当缓存闲置 n 秒后销毁 ->

timeToLiveSeconds="180" <!- 当缓存存活 n 秒后销毁->

diskPersistent="false"

diskExpiryThreadIntervalSeconds= "120"/

</ehcache

了解 ehcache 的几个概念,

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

Ø   timeToLiveSeconds ,缓存的存活时间,从开始创建的时间算起。

Ehcache 的三种清空策略:

1.   FIFO ,first in first out ,这个是大家最熟的,先进先出。

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

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

首页的页面缓存:

一个网站的首页估计是被访问的次数最多的,我们可以考虑给首页做一个页面缓存。

缓存策略:我认为应该是某个固定时间之内不变的,比如说 2 分钟更新一次,以应用

结构 page-filter-action-service-dao-db 为例。

位置:页面缓存做到尽量靠近客户的地方,就是在 page 和 filter 之间 ,这样的优

点就是第一个用户请求之后,页面被缓存,第二个用户再来请求的时候,走到 filter

个请求就结束了,无需再走后面的 action- service-dao-db 。带来的好处是服务器压力的减低和客户段页面响应速度的加快。

首页的页面缓存的存活时间,我们定的是 2 分钟,那么也就是说我们的timeToLiveSeconds 应该设置为 120 ,同时我们的 timeToIdleSeconds 最好也设置为 2 分钟,或者小于 2 分钟。

我们来看一下下面这个配置,这个配置片段应该放到 ehcache.xml 中:SimplePageCachingFilter 是缓存的名字,maxElementsInMemory 表示内存中SimplePageCachingFilter 缓存中元素的最大数量为 10,maxElementsOnDisk 是指持久化

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

接着我们来看一下 SimplePageCachingFilter 的配置,

XML/HTML 代码

<filter>

<filter-name>indexCacheFilterfilter-name>

<filter-class>

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

<filter-class>

<filter>

<filter-mapping>

<filter-name>indexCacheFilterfilter-name>

<url-pattern>*index.actionurl-pattern>

<filter-mapping>

就只需要这么多步骤,我们就可以给某个页面做一个缓存的,把上面这段配置放到你的

web.xml 中,那么当你打开首页的时候,你会发现,2 分钟才会有一堆 sql 语句出现在控

制台上。当然你也可以调成 5 分钟,总之一切都在控制中。

好了,缓存整个页面看上去是非常的简单,甚至都不需要写一行代码,只需要几行配置

就行了,够简单吧,虽然看上去简单,但是事实上内部实现却不简单哦,有兴趣的话,

大家可以看看 SimplePageCachingFilter 继承体系的源代码。

上面的配置针对的情况是缓存首页的全部,如果你只想缓存首页的部分内容时,你需要

使用 SimplePageFragmentCachingFilter 这个 filter。我们看一下如下片断:

XML/HTML 代码

<filter>

<filter-name>indexCacheFilterfilter-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 值最小的将会被清出缓存。

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

4.4.   在工程中单独使用

1.          创建 CacheManager net.sf.ehcache.CacheManager

1)          使用默认配置文件创建

CacheManager manager = CacheManager.create();

2)          使用指定配置文件创建

CacheManager manager = CacheManager.create("src/config/ehcache.xml");

3)          classpath 找寻配置文件并创建

URL url = getClass().getResource("/anothername.xml");

CacheManager manager = CacheManager.create(url);

4)          通过输入流创建

InputStream fis = new FileInputStream(new

File("src/config/ehcache.xml").getAbsolutePath());

try { manager = CacheManager.create(fis); } finally { fis.close(); }

2.          创建 Caches net.sf.ehcache.Cache

1)          取得配置文件中预先定义的 sampleCache1 设置 , 生成一个 Cache

Cache cache = manager.getCache("sampleCache1");

2)          设置一个名为 test 的新 cache,test 属性为默认

CacheManager manager = CacheManager.create();

manager.addCache("test");

3)          设置一个名为 test 的新 cache, 并定义其属性

CacheManager manager = CacheManager.create();

Cache cache = new Cache("test", 1, true, false, 5, 2);

manager.addCache(cache);

4)          删除 cache

CacheManager singletonManager = CacheManager.create();

singletonManager.removeCache("sampleCache1");

3.          使用 Caches

1)          cache 中加入元素

Element element = new Element("key1", "value1");

cache.put(new Element(element);

2)          cache 中取得元素

Element element = cache.get("key1");

3)          cache 中删除元素

Cache cache = manager.getCache("sampleCache1");

Element element = new Element("key1", "value1");

cache.remove("key1");

4.          卸载 CacheManager , 关闭 Cache

manager.shutdown();

分享到:
评论

相关推荐

    缓存框架-Ehcache学习笔记

    **缓存框架 Ehcache 学习笔记** Ehcache 是一个广泛使用的开源 Java 缓存框架,它在处理大量数据的高性能应用中扮演着重要角色。Ehcache 提供了本地内存缓存、磁盘存储以及分布式缓存的能力,使得应用程序能够快速...

    ehcache学习文档

    ### Ehcache学习文档知识点梳理 #### 一、文档概述与目的 - **文档目的**:旨在帮助读者深入了解和掌握Ehcache缓存技术,适用于所有对缓存技术感兴趣的技术人员。 - **文档范围**:覆盖了Ehcache的基础概念、配置...

    ehcache.jar及源码

    学习Ehcache时,开发者需要理解其配置文件(通常为`ehcache.xml`),其中包含了缓存管理器的配置、缓存的设置等信息。此外,Ehcache与Spring框架的集成也是常见的应用场景,通过Spring的缓存抽象,可以方便地将...

    ehcache2-7-3 源码

    在Ehcache 2.7.3版本中,我们可以从源码中学习以下几个关键知识点: 1. **缓存管理**:Ehcache的核心功能是管理缓存项,包括存储、检索和过期策略。它使用内存和磁盘两层结构,以确保即使内存满载也能继续提供服务...

    Ehcache 简单的监控

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

    Struts2+Spring+Hibernate+Ehcache+AJAX+JQuery+Oracle 框架集成用户登录注册Demo工程

    1)Demo 学习要点简介: ...2.Eclipse 导入后可能需要在 Xml Catalog 手动添加:ehcache-spring-1.2.xsd(ehcache-spring-annotations-1.2.0-sources.jar里面有,自己找下)。 3.内附Oracle建表等可执行语句。

    Ehcache_Hello

    **Ehcache简介** Ehcache是一款开源的Java缓存框架,它被广泛应用于提高应用程序性能,通过存储数据副本以减少对数据库的...通过`Ehcache_Hello`案例,开发者可以逐步学习和实践,从而熟练运用Ehcache进行缓存管理。

    ehcache-2.10.6.jar

    ehcache-2.10.6.jar ehcache jar包供各位开发人员 学习、交流,切勿用于商业用途。

    ehcache 测试 反射类 例子

    通过分析这些源代码,你可以学习如何集成Ehcache到你的应用程序中,以及如何使用反射进行测试和调试。 总结起来,这个例子展示了如何将Ehcache的强大缓存能力与Java反射机制相结合,以提高测试的灵活性和覆盖率。...

    EHCache.jar和文档

    EHCache 是一个开源的、高性能的缓存解决方案,广泛应用于Java应用程序中,以提高数据访问的速度和...通过学习这份技术文档和实际操作,开发者可以深入了解EHCache的工作原理,并有效地利用它来优化应用程序的性能。

    Mybatis-ehcache 1.2.1源码(ehcache-cache-mybatis-ehcache-1.2.1.tar

    通过对 Mybatis-ehcache 1.2.1 的源码学习,开发者可以更好地理解缓存如何与 ORM 框架协同工作,优化数据库交互,同时也能为自定义缓存解决方案提供参考。在实际开发中,结合缓存策略和监控,可以进一步提升系统的...

    ehcache学习笔记

    ** Ehcache 学习笔记** Ehcache 是一个开源的 Java 缓存系统,它提供了在应用程序中存储和检索数据的高效方式,特别是在高并发环境下。这个笔记将深入探讨 Ehcache 的核心概念、配置和使用场景,以及如何通过源码...

    ehcache学习源码

    通过深入学习Ehcache的源码,我们可以理解其内部的工作机制,包括缓存的创建、存储、检索、更新和清除过程,以及如何优化和调整缓存配置以适应不同应用场景。这有助于我们更好地利用Ehcache提升应用程序的性能,并...

    ehcache-1.2.3.jar 下载

    2. **Ehcache-1.2.3的功能特性** - **内存和磁盘缓存**:Ehcache支持在内存和磁盘上同时存储元素,当内存中的缓存满时,可以将部分元素移到硬盘上。 - **自动过期**:可以通过配置指定缓存元素的生命周期,过期后...

    spring+ehcache demo

    【Spring + Ehcache 整合应用详解】 ...通过学习和实践这个示例,开发者可以深入了解Spring与Ehcache的集成,以及如何利用缓存提升应用程序的性能。同时,了解如何管理和配置数据库连接,也是Java开发中的基础技能。

    ehcache jar包 源码

    2. **Cache(缓存)**:缓存是实际存储数据的容器,由`net.sf.ehcache.Cache`类表示。每个Cache都有自己的配置,如最大元素数量、内存和磁盘存储策略等。通过`CacheManager`实例可以创建并配置多个Cache。 3. **...

    项目优化之Ehcache页面缓存

    2. Ehcache工作原理 Ehcache基于Key-Value的数据结构,当一个对象被缓存时,会通过Key进行唯一标识。Ehcache内部采用分段(Segment)技术,每个段独立负责一部分Key的存储。当请求到来时,Ehcache会先在内存中查找,...

    spring+ehcache示例整合Demo

    Spring 和 Ehcache 是两个在Java开发中非常重要的框架。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-...这个示例Demo是学习和理解Spring与Ehcache集成的一个很好的起点。

    ehcache rmi集群demo

    Ehcache是一款广泛使用的开源Java缓存库,它允许应用程序高效地存储和...通过这个demo,开发者可以学习到如何利用Ehcache构建分布式缓存,以及如何通过RMI实现节点间的通信,为日后的分布式系统开发打下坚实的基础。

    springmvc+ehcache 实例

    2. **配置Ehcache**:创建ehcache.xml配置文件,定义缓存策略,如缓存的大小、过期时间等。在Spring MVC中,这个配置文件需要在Spring的配置文件中引用,以便于容器管理。 3. **创建缓存管理器**:在Spring配置中,...

Global site tag (gtag.js) - Google Analytics