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

基于OSCache的页面缓存(收藏)

阅读更多

 

一、缓存整个页面
        在OSCache组件中提供了一个CacheFilter用于实现页面级的缓存,主要用于对web应用中的某些动态页面进行缓存,尤其是那些需要生成PDF格式文件/报表、图片文件等的页面,不仅减少了数据库的交互、减少数据库服务器的压力,而且对于减少web服务器的性能消耗有很显著的效果。
这种功能的实现是通过在web.xml中进行配置来决定缓存哪一个或者一组页面,而且还可以设置缓存的相关属性,这种基于配置文件的实现方式对于J2EE来说应该是一种标准的实现方式了。
[注] 只有客户访问时返回http头信息中代码为200(也就是访问已经成功)的页面信息才能够被缓存。

        修改web.xml,增加如下内容,确定对/testContent.jsp页面进行缓存。

 

<filter>

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

<filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>

        <init-param>

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

         <param-value>600</param-value>

      </init-param>

      <init-param>

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

         <param-value>session</param-value>

      </init-param>

</filter>

<filter-mapping>

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

<!-对所有jsp页面内容进行缓存-->

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

</filter-mapping>


        在页面级缓存的情况下,可以通过设置CacheFilter的初始属性来决定缓存的一些特性:time属性设置缓存的时间段,默认为3600秒,可以根据自己的需要只有的设置,而scope属性设置,默认为application,可选项包括application、session。

二、缓存页面的部分
1、OSCache标签库配置
(1) 从src\webapp\WEB-INF\classes或etc目录取得soscache.tld文件,放在CLASSPATH下(src根目录或发布环境的/WEB-INF/classes  目录)。该文件定义了OSCache的定义。
(2) 将下列代码加入web.xml文件中:

 

<taglib>
<taglib-uri>oscache</taglib-uri>
<taglib-location>/WEB-INF/classes/oscache.tld</taglib-location>
</taglib>


2、cache标签

        这是OSCache提供的标签库中最重要的一个标签,包括在标签中的内容将应用缓存机制进行处理,处理的方式将取决于编程者对cache标签属性的设置。
        第一次请求到达时,标签中的内容被处理并且缓存起来,当下一个请求到达时,缓存系统会检查这部分内容的缓存是否已经失效,主要是以下几项:
        (1)缓存时间超过了cache标签设置的time或者duration属性规定的超时时间 
        (2)cron属性规定的时间比缓存信息的开始时间更晚 
        (3)标签中缓存的内容在缓存后又被重新刷新过 
        (4)其他缓存超期设定 
        如果符合上面四项中的任何一项,被缓存的内容视为已经失效,这时被缓存的内容将被重新处理并且返回处理过后的信息,如果被缓存的内容没有失效,那么返回给用户的将是缓存中的信息。
        cache标签的常用属性说明:

 

key

标识缓存内容的关键词。在指定的作用范围内必须是唯一的。默认的key是被访问页面的URI和后面的请求字符串。可以在同一个页面中使用很多cache标签而不指定他的key属性,这种情况下系统使用该页面的URI和后面的请求字符串,另外再自动给这些key增加一个索引值来区分这些缓存内容。但是不推荐采用这样的方式。

scope

缓存发生作用的范围,可以是application或者session。默认为application

time

缓存内容的时间段,单位是秒,默认是3600秒,也就是一个小时,如果设定一个负值,那么这部分被缓存的内容将永远不过期。

duration

指定缓存内容失效的时间,是相对time的另一个选择,可以使用简单日期格式或者符合USO-8601的日期格式。如:duration='PT5M' duration='5s'

cron

指定缓存内容失效表达式,见“Cron表达式基本语法”。

refresh

false 或者true。如果refresh属性设置为true,不管其他的属性是否符合条件,这部分被缓存的内容都将被更新,这给编程者一种选择,决定什么时候必须刷新。

mode

如果不希望被缓存的内容增加到给用户的响应中,可以设置mode属性为"silent"。此时被缓存的部分不在页面上显示,而其它任意的mode属性值都会将缓存的部分显示到页面上。

groups

指定当前cache标签所属的组,可使用“,”分割组名。这样就可以对缓存项进行分组了。如果缓存项依赖于应用的其它部分或其它数据,分组就有了用武之地——当这种依赖改变时(刷新相关的组),这个组的所有缓存项都将过期。

language

使用ISO-639定义的语言码来发布不同的缓存内容(under an otherwise identical key)。要在一个多语言网站上同一段JSP代码不同用户的参数提供不同的语言时,这个属性会很有用。

refreshpolicyclass

指定自定义的刷新策略类的全限定类名。这个类继承自com.opensymphony.oscache.web.WebEntryRefreshPolicy

refreshpolicyparam

指定任意需要传给refreshpolicyclass的参数。如果没有指定refreshpolicyclass,则这个值不起作用。


        这些属性可以单独使用,也可以根据需要组合使用。

3、Cron表达式基本语法
        通过Cron表达式我们可以很灵活的设置缓存的失效时间,Cron表达式包括5个字段分别为Minute,Hour, DOM(Day Of Month), Month,DOW(Day Of Week)。他们顺序地对应了5个位置。当某个位置上的值为*时,表示该位置上的任意时间。另外还提供了指定时间的操作符号"-",",","/",他们分别表示一段时间范围,具体的时间,以及递增的时间段。下面是几个例子说明一下Cron表达式的基本应用: 
        (1) "10/20 * * * *" :因是第一个位置,并且是一个递增的表达式,所以表达式指定的是每个小时的第10分钟,第30分钟,第50分钟缓存内容失效。
        (2) "* 8-18/4 * * *" :指定每天早上8点到晚上6点之间,每4个小时缓存内容失效。  等同于"* 8,12,16 * * *"。
        (3) "* * * * 1-5":表示每个星期一到星期五内容失效。

4、Cache标签实例分析
        (1) 最简单的cache标签用法。使用默认的关键字来标识cache内容,超时时间是默认的3600秒。

<oscache:cache>
<%
//自己的JSP代码内容
%>
</oscache:cache>

        (2) 用自己指定的字符串标识缓存内容,并且设定作用范围为session。

<oscache:cache key="foobar" scope="session">
<%
//自己的JSP代码内容
%>
</oscache:cache>

        (3) 动态设定key值,使用自己指定的time属性设定缓存内容的超时时间,使用动态refresh值决定是否强制内容刷新。因为OSCache使用key值来标识缓存内容,使用相同的key值将会被认为使用相同的的缓存内容,所以使用动态的key值可以自由的根据不同的角色、不同的要求决定使用不同的缓存内容。

<oscache:cache key="<%= product.getId() %>" time="1800" refresh="<%= needRefresh %>">
<%
//自己的JSP代码内容
%>
</oscache:cache>

        (4) 设置time属性为负数使缓存内容永不过期

<oscache:cache time="-1">
<%
//自己的JSP代码内容
%>
</oscache:cache>

        (5) 使用duration属性设置超期时间

<oscache:cache  duration='PT5M'>
<%
//自己的JSP代码内容
%>
</oscache:cache>

        (6) 使用mode属性使被缓存的内容不加入给客户的响应中

<oscache:cache  mode='silent'>
<%
//自己的JSP代码内容
%>
</oscache:cache>


5、flush标签
        这个标签用于在运行时刷新缓存。只有运行flush标签后再次访问相关缓存项时才执行刷新。
        属性说明:


scope[all]

指定要刷新的范围。可选的值是"application", "session"  nulnull(到底是null量还是all呀)值指定刷新所有的缓存(是指使用cache标签的缓存)。

key

当指定了scopekey值时,刷新唯一的缓存项。当这个缓存项下次被访问时将被刷新。只指定一个key值而没有指定scope不起作用。

group

指定一个组时将刷新所有这个组中的缓存项。只指定一个group值而没有指定scope不起作用。

pattern

任意包含pattern属性指定的值的缓存项都将被刷新。只指定一个pattern值而没有指定scope不起作用。 (注意:OSCache项目组已经不赞成使用pattern这个属性赖刷新缓存,二是鼓励使用具有更好的灵活性和性能的group属性来代替)



6、usecached标签
        <usecached />:必须嵌套在<cache>标签中。
        属性说明:

use

告诉所在的<cache>标签是否使用已经缓存的内容(缺省为true,使用缓存的内容)。可以使用这个标签来控制缓存。比如使用<frush>标签刷新某个key的缓存,但可以在必要的地方即使这样的强制刷新也仍然使用缓存内容而不刷新。


下面的内容没办法粘贴了,这破编辑器
分享到:
评论

相关推荐

    基于OSCache的页面缓存

    【基于OSCache的页面缓存】是Web应用中一种有效的性能优化策略,它涉及到缓存技术、分布式系统以及系统开发等多个领域。OSCache是开源的Java缓存框架,能够帮助开发者实现高效的页面和数据缓存,从而降低数据库的...

    SSM的整合+OScache页面缓存+freemark模板

    【OScache页面缓存】 OScache是Java的一个开源缓存框架,它可以用来缓存任何Java对象,包括页面。在SSM项目中引入OScache,可以在服务器端对经常访问的页面进行缓存,提高页面加载速度,减轻服务器压力。配置OScache...

    oscache-JSP缓存

    osCache是一个基于Java的缓存框架,主要针对JSP页面和Java对象的缓存。它通过将常用的数据存储在内存中,避免了频繁的数据库查询或计算,从而降低了服务器负载,提高了响应速度。osCache支持缓存页面片段、整个页面...

    OScache配置

    这种功能的实现是通过在web.xml中进行配置来决定缓存哪一个或者一组页面,而且还可以设置缓存的相关属性,这种基于配置文件的实现方式对于J2EE来说应该是一种标准的实现方式了。 [注] 只有客户访问时返回http头信息...

    OSCache学习例子 实例

    此外,OSCache还提供了缓存的过期策略,如时间间隔、基于引用的过期以及手动清除等,确保缓存的数据保持最新。 集成OSCache到J2EE应用中,通常涉及以下几个步骤: 1. **添加依赖**:在项目中引入OSCache的JAR文件...

    oscache说明

    2. **部分页面缓存**:通过使用 OSCache 提供的 Taglib,可以在 JSP 页面中使用 `&lt;cache&gt;` 标签来缓存特定部分的内容。在 `web.xml` 中添加对 Taglib 的支持,然后在 JSP 页面中引入标签库,如 `...

    oscache-2.4.1-full

    OSCache基于内存的缓存系统能够将经常访问的数据存储在内存中,避免了每次请求时都需要从数据库中获取数据的开销。通过缓存热点数据,它可以显著提升Web应用的响应速度,降低延迟,提高用户体验。 2. **JSP定制...

    OSCache

    1. **JSP页面缓存**: 对频繁访问的JSP页面进行缓存,减少服务器处理请求的时间。 2. **业务数据缓存**: 对于频繁读取但更新不频繁的业务数据,如商品信息、用户信息等,可存储在缓存中。 3. **查询结果缓存**: ...

    java页面缓冲

    OSCache是Java领域内一个著名的页面缓冲开源项目,它提供了全面的缓存解决方案,适用于各种类型的Java应用。 OSCache的核心功能包括: 1. **对象缓存**:OSCache允许开发者将任何Java对象缓存到内存中,以避免每次...

    OSCache需要的包

    在Java Web开发中,OSCache常被用于实现Session复制和分布式缓存,尤其在基于Spring或Hibernate的应用中,OSCache扮演着关键的角色。 `oscache.tld` 文件是 Tag Library Descriptor (TLD) 文件,它是JSP 2.0规范的...

    ajax4jsf-1.1.0.jar,oscache-2.3.2.jar

    2. **页面缓存**:整个Web页面可以被缓存,当用户请求相同页面时,可以直接从缓存中获取,显著提高了页面加载速度。 3. **分布式缓存**:在多服务器环境中,OSCache支持缓存的分布式部署,确保所有服务器都能访问到...

    oscache2.1_ful

    OSCache 基于 JVM 内存进行缓存,通过序列化和反序列化对象来存储和读取。当一个对象被缓存后,其在内存中的引用会被保存,后续请求可以直接从缓存中获取,无需再进行数据库查询。这极大地减少了数据库的负载,提高...

    应用OSCache提升J2EE系统运行性能

    3. 页面片段缓存:对动态生成但不常改变的网页部分进行缓存,提高页面渲染速度。 4. 复杂计算结果的缓存:对于耗时的计算结果,缓存起来可以避免重复计算。 五、配置与使用 在实际项目中,开发者需要配置OSCache的...

    oscache-2.4.1-full.rar

    网上对于OSCache缓存Web页面很多说明和例子,但对于缓存对象方面说得不多,我就把自已写得一些东西放出来,让大家看一看是怎样缓存对象的! 我基于GeneralCacheAdministrator类来写的BaseCache类 view plaincopy...

    oscache-2.3.jar

    它提供了全面的缓存管理功能,包括对象缓存、页面缓存以及对JSP标签的支持,能够有效减少数据库查询,提高应用程序响应速度。oscache-2.3.jar是该库的特定版本,可能包含了一些优化和修复的bug。 二、oscache核心...

    缓存技术详解

    页面缓存技术对于提高动态网站的性能非常有效: 1. **动态页面静态化**:将动态生成的页面转换为静态HTML文件,减少服务器处理时间。 2. **Servlet缓存**:通过Servlet容器支持的缓存机制来缓存页面输出。 3. **...

    oscache+ssi+velocity

    osCache提供了灵活的缓存策略,如时间过期、手动清除、基于内存大小的自动清理等,使得开发者可以根据需求进行定制。 其次,`SSI`全称为Server Side Includes,是一种简单的服务器端包含技术。在HTML文件中,通过...

    OSCache使用说明

    OSCache 是一个广泛使用的缓存解决方案,它支持多种技术,如 Hibernate、JSP 和页面缓存。本篇文章将深入探讨 OSCache 的配置和使用方法。 首先,安装 OSCache 包括以下几个步骤: 1. 从官方网站...

Global site tag (gtag.js) - Google Analytics