一、缓存整个页面
在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" 和 nul。null(到底是null量还是all呀)值指定刷新所有的缓存(是指使用cache标签的缓存)。
key
当指定了scope和key值时,刷新唯一的缓存项。当这个缓存项下次被访问时将被刷新。只指定一个key值而没有指定scope不起作用。
group
指定一个组时将刷新所有这个组中的缓存项。只指定一个group值而没有指定scope不起作用。
pattern
任意包含pattern属性指定的值的缓存项都将被刷新。只指定一个pattern值而没有指定scope不起作用。 (注意:OSCache项目组已经不赞成使用pattern这个属性赖刷新缓存,二是鼓励使用具有更好的灵活性和性能的group属性来代替)
language
使用ISO-639定义的语言码来发布不同的缓存内容(under an otherwise identical key)。要在一个多语言网站上同一段JSP代码不同用户的参数提供不同的语言时,这个属性会很有用。
6、usecached标签
<usecached />:必须嵌套在<cache>标签中。
属性说明:
use
告诉所在的<cache>标签是否使用已经缓存的内容(缺省为true,使用缓存的内容)。可以使用这个标签来控制缓存。比如使用<frush>标签刷新某个key的缓存,但可以在必要的地方即使这样的强制刷新也仍然使用缓存内容而不刷新。
示例代码如下:
<oscache:cache>
<% try { %>
... some jsp content ...
<% } catch (Exception e) { %>
<cache:usecached />
<% } %>
</oscache:cache>
7、addgroup标签
<addgroup />:必须嵌套在<cache>标签中。It allows groups to be dynamically added to a cached block. It is useful when the group(s) a cached block should belong to are unknown until the block is actually rendered. As each group is 'discovered', this tag can be used to add the group to the block's group list.
属性说明:
group- req
The name of the group to add the enclosing cache block to.
示例代码如下:
<oscache:cache key="test1">
<oscache:addgroup group="group1" />
... some jsp content ...
<oscache:addgroup group="group2" />
... some more jsp content ...
</oscache:cache>
8、使用标签的特殊说明
(1) 标签的属性值如果动态生成,则需要先把动态生成的值赋予一个变量,再使用JSP 表达式把动态值赋予对应的属性。
<!--正确的写法:-->
<%
String keyValue = (String)request.getAttribute("keyValue");
if(keyValue == null)
keyValue = "";
%>
<oscache:cache refresh='<%=keyValue%>'>……</ oscache:cache >
<!--不正确的写法:-->
<oscache:cache refresh='<%=(String)request.getAttribute("keyValue")%>'>
<!-属性的值此时为字符串“<%=(String)request.getAttribute("keyValue")%>”--->
</ oscache:cache >
(2) 标签的属性值对boolean是强类型的,比如cache的refresh属性要求为true或false,示例如下:
<!--正确的写法:-->
<oscache:cache refresh='true'>……</ oscache:cache >
<!--正确的写法:-->
<%
String needRefresh = (String)application.getAttribute("needRefresh");
if(needRefresh == null)
needRefresh = "false";
boolean t_f = Boolean.valueOf(needRefresh).booleanValue();
%>
<oscache:cache refresh='<%=t_f %>'>……</ oscache:cache >
<!--不正确的写法:-->
<oscache:cache refresh='<%= needRefresh %>'>……</ oscache:cache >
分享到:
相关推荐
oscache的基本概念 - **缓存**: 缓存是一种存储技术,用于暂时存储常用数据,以便快速访问。在osCache中,缓存以“区域”(Cache Regions)的形式组织,每个区域可以存储一组相关的数据。 - **缓存项**: 存储在...
本示例将通过一个天气预报Web服务的场景,详细介绍OsCache的使用方法。 首先,我们需要了解OsCache的基本概念。OsCache的核心是基于哈希表的数据结构,它可以在内存中存储对象,支持自动过期策略,可以设置缓存项的...
**一、Oscache基本原理** Oscache基于哈希映射实现,它在内存中创建一个对象存储区域,用于存放数据。当应用程序需要数据时,首先会检查缓存中是否存在,如果存在则直接返回,称为缓存命中;若不存在,则从底层数据...
《osCache缓存配置详解》 ...理解并掌握osCache的配置和使用方法,是优化系统性能、提升用户体验的关键步骤。在实际项目中,应根据业务需求调整缓存策略,确保osCache既能有效提高效率,又不会造成内存资源的过度消耗。
首先,理解OSCache的基本概念至关重要。OSCache的核心功能是提供内存中的对象缓存,它支持两种主要的缓存模式:本地缓存和分布式缓存。本地缓存适用于单服务器环境,而分布式缓存在多服务器环境下能确保数据的一致性...
一、osCache基本概念 osCache的核心理念是将数据存储在内存中,以减少对数据库或其他资源的频繁访问,从而提高系统的响应速度和整体性能。它支持缓存对象、集合、Map等各种数据类型,并提供了缓存过期、刷新策略等...
标题与描述概述的知识点主要集中在oscache的使用及其在Java环境下的配置与实施。oscache是一种缓存机制,主要用于提高Web应用的...正确理解和掌握oscache的使用方法,对于构建高效、稳定的Java Web应用具有重要意义。
1. **osCache的基本概念** - **缓存**:缓存是一种技术,用于临时存储频繁访问的数据,以便快速响应用户的请求,减少系统处理时间和资源消耗。 - **Java缓存框架**:在Java环境中,缓存框架如osCache提供了一套...
4. **docs**:文档目录,一般包含API文档、用户手册或者开发者指南,帮助开发者理解osCache的使用方法、API接口和最佳实践。 5. **src**:源代码目录,如果提供的话,可以查看osCache的内部实现,这对于学习和调试...
- **清理缓存**:可以调用`OsCache.clear()`方法清空整个缓存,或者使用`OsCache.evict(key)`清除指定的缓存条目。 ### 4. osCache的高级特性 - **事件监听**:osCache允许注册监听器来处理缓存的添加、删除和更新...
本篇文章将详细介绍OSCache的基本概念、配置与使用方法。 **1. OSCache简介** OSCache是由OpenSymphony开发的一个高性能、轻量级的缓存解决方案。它支持本地缓存和分布式缓存,可集成到多种应用服务器中,如Tomcat...
**osCache 2.1.1 全功能详解** osCache 是一款强大的缓存解决方案,尤其在Java开发中被广泛使用。它不仅提供了类似于Map的数据结构...通过理解其核心特性和使用方法,开发者可以有效地提升应用性能并降低系统负载。
以上就是OSCache缓存技术的基本介绍,通过理解并熟练掌握OSCache,开发者能够有效地提升应用性能,降低数据库压力,为用户带来更流畅的体验。在实践中,还需要根据具体项目需求进行优化和调整,以达到最佳的缓存效果...
3. 缓存对象:在需要缓存的地方,使用OSCache提供的put()方法将对象放入缓存,使用get()方法从缓存中获取。 4. 清理缓存:当数据更新或需要释放内存时,可以调用remove()方法清除指定的缓存项,或者通过clear()方法...
**osCache - JSP缓存技术详解** osCache是由OpenSymphony开源组织开发的一个高效、易用的缓存解决方案,特别适用于Java Web应用程序,尤其是...理解并掌握osCache的工作原理和使用方法,是提升Web应用性能的关键一步。
1. **快速入门**: 教程性质的内容,引导开发者快速了解OSCache的基本用法。 2. **配置指南**: 解释如何配置`oscache.xml`,以及各配置项的含义和用途。 3. **API文档**: 描述了OSCache的类库接口,方便开发者进行...
在这个"oscache 例子"中,我们将探讨`osCache`的基本使用方法、配置以及它如何融入到Java Web应用中。 1. **osCache的基本概念**: - **缓存**:缓存是一种技术,用于临时存储常用数据,以减少访问原始数据源(如...
本文将深入探讨Oscache的核心功能、使用方法以及源码分析,帮助读者全面了解这一工具的精髓。 首先,我们要理解什么是缓存。缓存是一种存储技术,用于临时存储常用数据,以减少对主存储器或网络资源的访问,从而...
总结来说,osCache工程示例是一个学习和实践osCache的实用资源,涵盖了缓存框架的基本用法和高级特性,对于提升Java应用的性能有着显著的作用。通过深入研究这个示例,开发者可以掌握如何有效地利用缓存优化程序,...
要使用OSCache,你需要在项目中引入OSCache的依赖。如果你使用的是Maven,可以在pom.xml文件中添加如下依赖: ```xml <groupId>net.sf.oscache</groupId> <artifactId>oscache <version>2.4.1 ``` 然后,你需要...