OSCache操作详解+标签使用

1、OSCache是什么?   

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

2、OSCache的特点  

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

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

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

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

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

3、OSCache缓存的三种模式

(1)缓存于内存中

(2)缓存于硬盘中

(3)一种较灵活的方式,先缓存于内存中,如果满了则转至硬盘

4、OSCache的安装与配置

OSCache是当前运用最广的缓存方案,JBoss,Hibernate,Spring等都对其有支持,

下面简单介绍一下OSCache的配置和使用过程。

1.安装过程

从http://www.opensymphony.com/oscache/download.html下载合适的OSCache版本,

我下载的是oscache-2.4.1-full版本。

解压压缩文件得到文件夹oscache-2.4.1-full

从解压缩目录取得oscache.jar 文件放到/WEB-INF/lib 或相应类库目录 目录中,

jar文件名可能含有版本号和该版本的发布日期信息等,如oscache-2.4.1.jar

将lib下的commons-logging.jar和jgroups-all.jar都放入到/WEB-INF/lib中

从src或etc目录取得oscache.properties 文件,放入src根目录或发布环境的/WEB-INF/classes 目录

如你需要建立磁盘缓存,须修改oscache.properties 中的cache.path信息 (去掉前面的#注释)。

设定如下:

Cache.manory=false;

cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.HashPersistenceListener;

win类路径类似为c:\\app\\cache

unix类路径类似为/opt/myapp/cache

拷贝OSCache标签库文件oscache.tld到src目录或者/WEB-INF/classes目录。

现在你的应用目录类似如下:

$WEB_APPLICATION\WEB-INF\lib\oscache.jar

$WEB_APPLICATION\WEB-INF\lib\commons-logging.jar

$WEB_APPLICATION\WEB-INF\lib\jgroups-all.jar

$WEB_APPLICATION\WEB-INF\classes\oscache.properties

$WEB_APPLICATION\WEB-INF\classes\oscache.tld

将下列代码加入web.xml文件中即可使用OSCache提供的标签了

<taglib>

<taglib-uri>oscache</taglib-uri>

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

</taglib>

2.oscache.properties 文件配置向导(源文件已经写好了只要将语句前面的#号去掉即可)

cache.memory

值为true 或 false ,默认为在内存中作缓存,

如设置为false,即将缓存的数据存到cache.path配置好的路径下

cache.capacity

缓存元素个数

cache.persistence.class

持久化缓存类,如此类打开,则必须设置cache.path信息

cache.cluster 相关

为集群设置信息。

cache.cluster.multicast.ip为广播IP地址

cache.cluster.properties为集群属性

5.OSCache的基本用法

1.OSCache标签的使用

注意:要使用标签必须在web.xml中配置好之后再在页面中引入,在页面开始加入<%@ taglib uri="oscache"prefix="cache" %>句即可

以下两个页面是使用OSCache标签的例子:

cache1.jsp 内容如下

<%@page import="java.util.*" %>

<%@taglib uri="oscache" prefix="cache" %>

<html>

<body>

<!—未使用到标签-->

没有缓存的日期: <%= new Date() %><p>

<!--自动刷新但是没有给标记符key赋值-->

<cache:cachetime="30">

每30秒刷新缓存一次的日期:<%= new Date() %>

</cache:cache>

<!--手动刷新,给标记符key赋值了-->

<cache:cachekey="testcache">

手动刷新缓存的日期: <%= new Date() %> <p>

</cache:cache>

<ahref="cache2.jsp">手动刷新</a>

</body>

</html>

cache2.jsp 执行手动刷新页面如下:

<%@taglib uri="oscache" prefix="cache" %>

<html>

<body>

缓存已刷新...<p>

<!—根据key定位到cache1.jsp页面的testcache,范围为application,使用的是flush标签用来清空缓存-->

<cache:flushkey="testcache" scope="application"/>

<ahref="cache1.jsp">返回</a>

</body>

</html>

你也可以通过下面语句定义Cache的有效范围,如不定义scope,scope默认为Applcation

<cache:cache time="30"scope="session">

...

</cache:cache>

6. 缓存过滤器 CacheFilter

如果是对页面进行缓存则需要在web.xml中定义缓存过滤器,定义特定资源的缓存。

<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>60</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>

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

</filter-mapping>

上面定义将缓存所有.jsp页面,缓存刷新时间为60秒,缓存作用域为Session

注意:如果要加入其它的属性的话只要添加一个<init-param>标签对,在其中添加相应的属性,用法跟在jsp页面使用标签是一致的

注意,CacheFilter只捕获Http头为200的页面请求,即只对无错误请求作缓存,

而不对其他请求(如500,404,400)作缓存处理

7、主要的标签以及标签属性

Cache标签——缓存代码段主要使用到的标签:

属性说明:

key
 标识缓存内容的关键词。在指定的作用范围内必须是唯一的。默认的key是被访问页面的URI和后面的请求字符串。可以在同一个页面中使用很多cache标签而不指定他的key属性,这种情况下系统使用该页面的URI和后面的请求字符串,另外再自动给这些key增加一个索引值来区分这些缓存内容。但是不推荐采用这样的方式。
 
scope
 缓存发生作用的范围,可以是application或者session。默认为application。
 
time
 缓存内容的时间段,单位是秒,默认是3600秒,也就是一个小时,如果设定一个负值,那么这部分被缓存的内容将永远不过期。
 
duration
 指定缓存内容失效的时间,是相对time的另一个选择,可以使用简单日期格式或者符合USO-8601的日期格式。如:duration='PT5M' duration='5s'等。

注意:time与duration的区别是time的单位是秒所以设置的时候是只要输入一个阿拉伯数字,而duration的话可以使用简单日期格式或者符合USO-8601的日期格式。如:duration='PT5M' duration='5s'等

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":表示每个星期一到星期五内容失效。
 
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,则这个值不起作用。

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

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


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代码不同用户的参数提供不同的语言时,这个属性会很有用。

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

group
定义cache标签的group名称

示例代码如下:
<oscache:cache key="test1">
    <oscache:addgroupgroup="group1" />
        ... some jsp content ...
    <oscache:addgroupgroup="group2" />
    ... some more jsp content ...
</oscache:cache>

转载于:https://www.cnblogs.com/javaEEspring/archive/2012/05/18/2523219.html

OSCache操作详解+标签使用相关推荐

  1. thinkphp ajax volist,thinkphp中的volist标签在ajax中操作详解

    在一个ThinkPHP的复杂页面(包含volist)中实现volist标签显示Jquery查询结果的返回.本文主要和大家介绍thinkphp 中的volist标签在ajax操作中的特殊性(推荐),需要 ...

  2. HTML对字体的操作详解

    摘自:HTML对字体的所有操作详解(经典) 作者:HeroKern 发布时间: 2016-01-31 21:15:31 网址:https://blog.csdn.net/qq_21792169/art ...

  3. pymssql mysql_Python数据库模块pymssql连接SQLServer数据库操作详解

    Python数据库模块pymssql连接SQLServer数据库操作详解 发布时间:2018-08-23 19:32, 浏览次数:720 , 标签: Python pymssql SQLServer ...

  4. 核心要素及常用操作详解

    核心要素及常用操作详解 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5z6s4kZN-1678660733651)(http://49.7.203.222:3000/ ...

  5. java迭代器删除元素_java迭代器中删除元素的实例操作详解

    java迭代器中删除元素的实例操作详解 2021-01-21 16:40:08 我们知道通过Iterator,可以对集合中的元素进行遍历.那么在其中遇到我们不需要的元素时,可不可以在遍历的时候顺便给删 ...

  6. java控制mac录音代码_操作详解丨如何用 Cybery 控制 mac OS系统下的录音软件(DAW)...

    原标题:操作详解丨如何用 Cybery 控制 mac OS系统下的录音软件(DAW) Cybery可以在各主流平台/操作系统下实现MIDI控制功能:mac OS(可通过蓝牙.USB线或者借助其它硬件连 ...

  7. Git 远程库操作详解

    CSDN GitHub Git 远程操作详解 AderXCoding/system/tools 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢 ...

  8. Git 远程操作详解(再不会 Git 就真的没团队收你了,嗯哼)

    Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Gi ...

  9. python输入参数改变图形_Python基于Tensor FLow的图像处理操作详解

    本文实例讲述了Python基于Tensor FLow的图像处理操作.分享给大家供大家参考,具体如下: 在对图像进行深度学习时,有时可能图片的数量不足,或者希望网络进行更多的学习,这时可以对现有的图片数 ...

最新文章

  1. Servlet 传输中文乱码解决方法
  2. 考夫曼:破解大脑代码并创建真正的人工智能
  3. 开灯问题 简单模拟法
  4. 【机器学习基础】深入理解Logistic Loss与回归树
  5. tanh python_带有Python示例的math.tanh()方法
  6. AutoResetEvent和ManualResetEvent对比
  7. 面试手写代码的经验分享
  8. 雅虎邮箱pop服务器,雅虎邮箱pop如何设置
  9. 2022年工具钳工(技师)最新解析及工具钳工(技师)试题及解析
  10. oracle 发的邮件qq,python基于SMTP发送QQ邮件
  11. Excel 相同名称或ID的 内容 合并起来 同列不同内容剃加
  12. 怎么将word2016的背景色改成护眼绿?
  13. 一场 Chat 拥有自己的博客
  14. PiKachu-File Inclusion(文件包含漏洞)
  15. linux创建后门账户,Linux后门
  16. 【Spring Boot】21.集成elasticsearch
  17. miniK8S单节点环境搭建初试
  18. 攻防世界Web练习区Writeup
  19. 使用node实现歌词滚动输出
  20. 哪个软件可以制作GIF动态图

热门文章

  1. 使用Xcode 6中的AutoLayout约束模拟方面适合行为
  2. REST和RESTful有什么区别
  3. ros开发增加clion常用模板及初始化配置(一)
  4. logback日志配置文件
  5. java实现增量更新_Android 增量更新的完整实现步骤
  6. _Linux学习笔记
  7. 洛谷——P1548 [NOIP1997 普及组] 棋盘问题
  8. 如何学习嵌入式开发必备技能
  9. Mapbox词汇表中文文档(查找Mapbox相关的术语及其定义)
  10. php底层开发框架, yaf,swoole,hiphop