`
精神分裂
  • 浏览: 28460 次
  • 性别: Icon_minigender_1
  • 来自: 二次元世界
社区版块
存档分类
最新评论

OSCache - 缓存标签

阅读更多
<cache:cache>是OSCache提供的标签库中最重要的一个标签,包括在标签中的内容将应用缓存机制进行处理,处理的方式将取决于编程者对cache标签属性的设置。

第一次请求到达时,标签中的内容被处理并且缓存起来,当下一个请求到达时,缓存系统会检查这部分内容的缓存是否已经失效,主要是以下几项:
1. 缓存时间超过了cache标签设置的time或者duration属性规定的超时时间;
2. cron属性规定的时间比缓存信息的开始时间更晚;
3. 标签中缓存的内容在缓存后又被重新刷新过;
4. 其他缓存超期设定

如果符合上面四项中的任何一项,被缓存的内容视为已经失效,这时被缓存的内容将被重新处理并且返回处理过后的信息,如果被缓存的内容没有失效,那么返回给用户的将是缓存中的信息。

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

scope - 缓存发生作用的范围,可以是application或者session。

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

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

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,则这个值不起作用。其它可用的属性还包括:cron 、groups、language、refreshpolicyclass、refreshpolicyparam。


Cache标签实例分析
最简单的cache标签用法。使用默认的关键字来标识cache内容,超时时间是默认的3600秒。
<oscache:cache>
	<% //自己的JSP代码内容%>
</oscache:cache>


设置time属性为负数使缓存内容永不过期
<oscache:cache time="-1">
	<% //自己的JSP代码内容 %>
</oscache:cache>


使用duration属性设置超期时间


使用mode属性使被缓存的内容不加入给客户的响应中
<oscache:cache  mode='silent'>
	<% //自己的JSP代码内容 %>
</oscache:cache>


用自己指定的字符串标识缓存内容,并且设定作用范围为session。
<oscache:cache key="foobar" scope="session">
	<% //自己的JSP代码内容%>
</oscache:cache>


动态设定key值,使用自己指定的time属性设定缓存内容的超时时间,使用动态refresh值决定是否强制内容刷新。因为OSCache使用key值来标识缓存内容,使用相同的key值将会被认为使用相同的的缓存内容,所以使用动态的key值可以自由的根据不同的角色、不同的要求决定使用不同的缓存内容。
<oscache:cache key="<%= product.getId() %>" time="1800" refresh="<%= needRefresh %>">
	<% //自己的JSP代码内容%>
</oscache:cache>



flush标签:这个标签用于在运行时刷新缓存。只有运行flush标签后再次访问相关缓存项时才执行刷新。
<oscache:flush key="cacheKey" scope="application" />


usecached标签:必须嵌套在<cache>标签中。告诉所在的<cache>标签是否使用已经缓存的内容(缺省为true,使用缓存的内容)。可以使用这个标签来控制缓存。比如使用<frush>标签刷新某个key的缓存,但可以在必要的地方即使这样的强制刷新也仍然使用缓存内容而不刷新。
<oscache:cache>
	<% try { %>
		... some jsp content ...
	<% } catch (Exception e) { %>
		<cache:usecached />
	<% } %>
</oscache:cache>


使用标签的特殊说明
标签的属性值如果动态生成,则需要先把动态生成的值赋予一个变量,再使用JSP 表达式把动态值赋予对应的属性。
<!--正确的写法:-->
<%
String keyValue = 
(String)request.getAttribute("keyValue");
if(keyValue == null)
	keyValue = "";
%>
<oscache:cache  refresh='<%=keyValue%>'>
	......
</oscache:cache >


<!--不正确的写法:-->
<oscache:cache refresh=
'<%=(String)request.getAttribute("keyValue")%>'>
	......
</oscache:cache >

属性的值此时为字符串:"<%=(String)request.getAttribute("keyValue")%>"

标签的属性值对boolean是强类型的,比如cache的refresh属性要求为true或false,示例如下:
<!--不正确的写法:-->
<!--正确的写法:-->
<oscache:cache refresh="true">
	......
</oscache:cache >
<!--正确的写法:-->
<% String needRefresh = 
(String)application.getAttribute("needRefresh");
if(needRefresh == null) needRefresh = "false";
boolean boo = 
Boolean.valueOf(needRefresh).booleanValue(); %>
<oscache:cache refresh='<%=boo %>'>
	......
</oscache:cache >


<!--不正确的写法:-->
<oscache:cache refresh='<%= needRefresh %>'>
......
</oscache:cache >
分享到:
评论

相关推荐

    OSCache缓存技术

    Cache是一种用于提高系统响应速度、改善系统运行性能的技术。尤其是在Web应用中,通过缓存页面的输出...OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存解决方案。

    OSCache入门教程

    OSCache是一个开放式资源缓冲库,可从...它包括一组JSP的标签,通过它们可以很容易的在你的程序中实现页面缓存,同时,还可以使用它的过滤器,可缓冲的不仅仅是JSP页面,还可以缓存任何Servlet生成的内容。

    ssh整合项目

    采用优化性能技术,采用oscache缓存,freemarker静态页面生成; 功能比较多但操作简单的后台管理;(后台管理附图片); 安装方法: 1:mysql中新建数据库dgssen.导入dgssen.sql 也可以修改:WebRoot\META-INF\context....

    hibernate+spring+struts2

    绿色健康购物网SSH 个人水平有限,如有问题与建议,请指教! (1)个人独立完成,包括mysql...(4)采用优化性能技术,采用oscache缓存,freemarker静态页面生成; (5)功能比较多但操作简单的后台管理;(后台管理附图片)

    淘特大型门户网站CMS企业版

    13、基于OSCache的缓存利用。 14、强大的采集系统,多线程并发采集、基于TASK任务的定时采集功能。 15、高性能的计数统计模块,linklist缓存+定时批量处理入库,访问量在百万以上时所占资源仍较少(此模块已被...

    SSH绿色健康购物网.rar

    (4)采用优化性能技术,采用oscache缓存,freemarker静态页面生成; (5)功能比较多但操作简单的后台管理;(后台管理附图片); 安装方法: 1:mysql中新建数据库dgssen.导入dgssen.sql 也可以修改:WebRoot\META-INF\...

    购物管理系统

    (4)采用优化性能技术,采用oscache缓存,freemarker静态页面生成; (5)功能比较多但操作简单的后台管理;(后台管理附图片); 安装方法: 1:mysql中新建数据库dgssen.导入dgssen.sql 也可以修改:WebRoot\META-INF\...

    Java小说系统 V1.0 Beta

    2:采用Java开源的Oscache为网站进行缓存,默认对首页和列表页进行缓存,可以在Web.Xml中进行配置。 3.采用后台添加采集规则,对小说进行采集,简单方便,不用另外使用插件就可以采集小说内容。 使用环境: ...

    运用struts1.2+hibernate+spring 框架完整购物商城项目(内含sql文件)

    一个J2EE购物网站的实现 运用struts1.2+hibernate+spring 框架,数据库连接池,事务管理;Struts 应用国际化,Struts 标签库与Tiles框架, JSTL标签库,... 采用优化性能技术,采用oscache缓存,freemarker静态页面生成

    iBATIS实战

    9.4 如何使用高速缓存模型中的标签 160 9.4.1 高速缓存的清除 160 9.4.2 设置高速缓存模型实现的特性 163 9.5 高速缓存模型的类型 163 9.5.1 MEMORY 163 9.5.2 LRU 164 9.5.3 FIFO 165 9.5.4 OSCACHE 166 9.5.5 你...

    SSH绿色健康购物网

    (4)采用优化性能技术,采用oscache缓存,freemarker静态页面生成; (5)功能比较多但操作简单的后台管理;(后台管理附图片); 安装方法: 1:mysql中新建数据库dgssen.导入dgssen.sql 也可以修改:WebRootMETA-...

Global site tag (gtag.js) - Google Analytics