`
小甜甜弟弟
  • 浏览: 33748 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多
1                 摘要
本文档介绍了如何在 Portlet 应用中使用 OSCache 进行页面内容缓存和对象缓存,分析了 OSCache 的实现原理,并提出了一个用来缓存对象和页面的简单易用的方案。本文档不涉及 OSCache 的安装与配置的内容,相关内容请参考 OSCache 的 在线文档 。

2                 OSCache 简介
OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能。OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存解决方案。

OSCache有以下特点:

l      缓存任何对象:你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。

l      拥有全面的API:OSCache API允许你通过编程的方式来控制所有的OSCache特性。

l      永久缓存:缓存能被配置写入硬盘,因此允许在应用服务器的多次生命周期间缓存创建开销昂贵的数据。

l      支持集群:集群缓存数据能被单个的进行参数配置,不需要修改代码。

l      缓存过期:你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不能满足需要时)。

3                 OSCache 缓存原理简介
Cache Factory

Cache Proxy

Cache Map

Memory

Disk

 

Listeners

Cache Entry


图 3-1 OSCache 架构概览

Cache Factory :该实体负责获得 Cache Proxy ,兼有一些对 Cache Proxy 的管理功能。对应到现在的 OSCache 实现中的类是: GeneralCacheAdministrator 和 ServletCacheAdministrator 。

Cache Proxy :该实体是 Cache Map 的代理,它主要负责从 Cache Map 中取得 / 存储指定的缓存对象,如果缓存对象过期,那么就将缓存刷新,并向指定的监听者发送存 / 取事件。对应到现在的 OSCache 实现中的类是: Cache 和 ServletCache 。

Cache Map :该实体存储了所有的缓存实体,是一个 OSCache 专有的 Map 实现,它能根据指定的算法清除缓存,以及将缓存持久化到磁盘中。对应到现在的 OSCache 实现中的类是: FIFOCache , LRUCache 和 UnlimitedCache 。

Listeners : OSCache 存 / 取事件的监听者实体。对应到现在的 OSCache 实现中的类是: CacheEntryEventListener 和 CacheMapAccessEventListener 。

Cache Entry :表示缓存对象的包装实体,它包装了缓存对象和刷新策略。对应到现在的 OSCache 实现中的类是: CacheEntry 。

3.1           应用场景
一个典型的“缓存对象”场景是:

应用调用 Cache Factory 获得 Cache Proxy ,然后应用将要缓存的对象以及刷新策略通过 Cache Proxy 存储到 Cache Map 中,并通知各个 Listener 。

一个典型的“取得缓存对象”的场景是:

应用调用 Cache Factory 获得 Cache Proxy ,然后给 Cache Proxy 的相应方法传入要获得的缓存对象的 key , Cache Proxy 会根据指定的刷新策略判断缓存是否过期,如果缓存没有过期,则返回缓存对象,如果缓存过期,则刷新缓存,并向应用层抛出需要刷新的异常( NeedsRefreshException ),应用如果收到此异常,将重新计算内容并将内容缓存。

 

4                 Web 应用中的缓存方案
4.1           假定
OSCache 现有的缓存刷新策略(超过指定时间后自动过期,超过指定日期后自动过期,按照克龙表达式的设定自动过期)不能满足需求。现有应用要求:当数据源的部分内容更新后,能够使相关缓存过期,展现页面从数据源取得更新的内容显示。

4.2           方案应用场景
该方案为下列场景提供了支持:

1. 缓存整个 Response ,能够定制刷新指定的 Response 。

2. 缓存 JSP 页面内容,能够定制刷新指定的缓存内容。

3. 缓存对象,能够定制刷新指定的缓存对象。

4.3           配置
4.3.1           配置 ***CacheFilter
在 Web 应用的 web.xml 中添加下面的内容:

< filter>

              < filter-name>CacheFilter</filter-name>

              < filter-class>

                     com.***.portal.oscache.***CacheFilter

              </ filter-class>

              < init-param>

                     < param-name>time</param-name>

                     < param-value>-1</param-value>

              </ init-param>

              < init-param>

                     < param-name>scope</param-name>

定制这个 fileter 缓存的 response 的组

                     < param-value>application</param-value>

              </ init-param>

              <init-param>

                     <param-name>groups</param-name>

                     <param-value> landy </param-value>

              </init-param>

       </ filter>

< filter-mapping>

              < filter-name>CacheFilter</filter-name>

              < url-pattern>/ landy </ url-pattern>

       </ filter-mapping>


注意:

为了在部分数据更新时只刷新部分 Response , ***CacheFilter 比 OSCache 提供的 CacheFitler 增加了一个可配置的参数:“ groups ”,部署者可以通过这个参数配置这个 filter 所映射的 URLS 的组(通常同一个组的 URL 会从同时更新的数据源取数据),这样当数据源某部分更新之后,我们就可以刷新从这部分数据源取数据的 URLs 。该配置项支持配置多个组,以逗号作为分隔符,如:“ group1,group2 ”。

其他的配置项说明请参考 OSCache 在线文档的 CacheFilter 配置部分 。

4.4           缓存整个 Response
OSCache 提供的 CacheFilter 能够缓存 Response ,但不能供应用选择性的刷新某些 Response ,而 ***CacheFilter 就能支持这一特性。

4.4.1           使用方法
您可以按照以下的方式刷新某一组( Filter 初始化参数中 groups 参数配置的内容)的 Responses:

ServletCacheAdministrator admin = null;

Filter 初始化参数中 scope 参数配置的内容

 

admin = ServletCacheAdministrator.getInstance(config

                           .getServletContext());

Filter 初始化参数中 groups 参数配置的内容

Cache cache = admin.getCache(httpRequest, cacheScope);

cache. flushGroup(group);


4.4.2           约束
这种方案仅适用于普通的 web 应用,不适用于 Portlets 应用,因为在 Portlets 应用中,每个 Portlet 都是页面上一个可插拔的组件,如果被缓存的 Response 代表的页面中某个 Portlet 被删除了,那么这个页面产生的 Response 就会不一样,而这时应用却无法刷新缓存的 Response 。

4.5           缓存 JSP 页面内容
可以在 JSP 页面中将要缓存的内容置于 <cache></cache> 标签之间,当更新数据源的事件产生时,在处理事件的方法中加入如下代码即可:

***OSCacheUtil.getInstance().flushGroup("group1");


4.5.1           样例
我要缓存一个从数据源的 A 表取数据的 JSP 内容段,如下表所示:

<oscache:cache key="foobar" scope="application" time="-1" groups="group1" >

//business code

Select * from table A and Display

</oscache:cache>


数据源更新了,在处理数据更新事件的代码中,我加入下表的代码:

***OSCacheUtil.getInstance().flushGroup("group1");


这样就可以刷新缓存的 group1 组的数据了。

4.5.2           约束
本方案在满足了 4.1 描述的需求的条件下,仅支持选择性的刷新存储在 application 域( cache 标签中 scope 属性配置为 application )的缓存。为什么不支持选择性的刷新 session 域的缓存呢?是因为数据更新的事件产生是随机的,当数据更新事件发生时,我们无法得到 web 服务器中的每个 session ,所以不能支持选择性的刷新 session 域的缓存。

4.6           缓存对象
可以在 web 应用的业务处理逻辑中将要缓存的对象采用如下的方式将对象缓存到 application 域中:

***OSCacheUtil.getInstance().putInCache(key, content, new String[]{“group1”});


当更新数据源的事件产生时,在处理事件的方法中加入如下代码即可:

***OSCacheUtil.getInstance().flushGroup("group1");


4.6.1           约束
同 4.5.2 一致。

 

5                 Demo
5.1           方案框架
包括 ***CacheFilter 和 ***OSCacheUtil 。


5.2           测试用例(基于 portlet )
用例 src :
用例 ear :
参考资料:

[1] http:/www.opensymphony.com/oscache/

分享到:
评论

相关推荐

    OSCache学习例子 实例

    OSCache是开源的Java缓存解决方案,主要用于提高Web应用程序的性能和响应速度。它是由OpenSymphony团队开发的,能够缓存对象、SQL查询结果甚至整个页面,避免了频繁访问数据库或执行昂贵的计算,从而降低了系统负载...

    Oscache框架的搭建步骤

    ### Oscache框架的搭建与应用详解 在现代Web开发中,缓存技术是提升系统响应速度、优化用户体验的关键策略之一。Oscache框架作为一种高效、灵活的缓存解决方案,在Java Web应用,尤其是JSP环境中,提供了强大的缓存...

    OSCache配置说明文档

    本文档的主要目的是阐述OSCache的核心功能、配置方法以及实际应用中的操作步骤,帮助开发者理解和有效地利用OSCache提升应用程序性能。 阅读对象: 此文档适合对Java Web开发有一定了解,希望引入缓存机制以优化...

    oscache缓存技术入门实例

    osCache 是一个开源的、基于Java的缓存框架,它为Java应用程序提供了高效且可配置的内存缓存功能。在本文中,我们将深入探讨osCache的基本概念、工作原理以及如何在实际项目中进行配置和使用。 一、osCache基本概念...

    oscache-2.4.1-full

    OSCache是OpenSymphony开发的一款高效、开源的Java缓存框架,主要应用于Web应用程序,特别是JSP环境。其核心功能是提供内存级别的缓存服务,从而显著提高网页的加载速度和减少数据库的压力。标题"oscache-2.4.1-full...

    oscache的使用实例和详解

    **osCache:高效缓存框架详解与实例应用** osCache是一款流行且强大的Java缓存框架,主要用于提高应用程序的性能和响应速度。它通过将经常访问的数据存储在内存中,避免了反复读取数据库或计算数据的过程,从而显著...

    oscache详细配置文档

    OSCache 是一个强大的开源缓存解决方案,主要用于提升 Java Web 应用程序的性能。它能够缓存页面内容,减轻数据库压力,并减少服务器的资源消耗。本文将详细介绍 OSCache 的配置和使用方法。 **一、缓存整个页面** ...

    oscache-java缓存框架

    osCache是Java开发中常用的缓存框架之一,它主要用于提高应用程序的性能和效率,通过将数据存储在内存中,减少对数据库的访问。osCache不仅可以用于Web应用,也可以用于任何Java应用程序,支持集群环境,提供了丰富...

    oscache(JSP定制标记应用)

    javaweb做页面缓存常用,OSCache是一个工业级的J2EE缓存实现。OSCache不但能缓存java对象,还可以缓存页面,http请求和二进制内容,例如pdf文件等。通过应用OSCache,我们不但可以实现通常的Cache功能,还能够改善...

    OSCache需要的包

    OSCache 是一个高效的、开源的缓存框架,主要用于 Java 应用程序,它提供了一种在内存中存储对象的方式,以提高数据访问速度并减轻数据库的负载。在Java Web开发中,OSCache常被用于实现Session复制和分布式缓存,...

    oscache-2.1.jar

    oscache-2.1.jar oscache-2.1.jar

    oscache缓存配置

    《osCache缓存配置详解》 osCache是Java平台上的一个高效、易用的缓存解决方案,它由Tuckey组织开发,广泛应用于各种Web应用中,以提高数据读取速度,减轻数据库压力。osCache的核心功能是提供了一个内存中的对象...

    oscache所需jar包

    `osCache`是一个广泛使用的Java缓存解决方案,它为应用程序提供了内存缓存功能,能够有效地减少对数据库的访问,从而提升整体系统的响应速度。`osCache`的核心库依赖于`commons-logging.jar`,这是一个通用的日志...

    OsCache缓存框架使用示例

    OsCache是Java应用程序中常用的缓存框架,它能够有效地提高应用程序的性能,通过将经常访问的数据存储在内存中,减少对数据库或其他数据源的访问,从而降低系统负载。本示例将通过一个天气预报Web服务的场景,详细...

    oscache-2.2jar包

    osCache是Java平台上的一个开源缓存解决方案,主要用于提高应用程序的性能和响应速度。oscache-2.2jar包是该软件的一个版本,版本号为2.2。它包含了一系列的类和接口,用于实现内存中的对象缓存,从而减少对数据库或...

    oscache,缓存机制的使用

    标题与描述概述的知识点主要集中在oscache的使用及其在Java环境下的配置与实施。oscache是一种缓存机制,主要用于提高Web应用的响应速度和优化系统性能。以下是对这些知识点的详细解析: ### oscache简介 oscache...

    教你如何用好oscache的详细文档

    **osCache 是一款高效、轻量级的 Java 缓存框架,主要用于提高应用程序的性能和减少对数据库的访问。在本文中,我们将深入探讨 osCache 的核心概念、使用场景以及如何在项目中有效地利用它。** ### 一、缓存的重要...

    hibernate+oscache实现二级缓存实例

    为了提高系统性能,通常会采用缓存技术来减少对数据库的直接访问,而OSCache就是一种广泛使用的开源缓存解决方案。本实例将介绍如何结合Hibernate和OSCache实现二级缓存,以优化应用程序的性能。 一级缓存是...

Global site tag (gtag.js) - Google Analytics