java oscache 使用_OSCache操作详解+标签使用

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提供的标签了

oscache

/WEB-INF/classes/oscache.tld

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中配置好之后再在页面中引入,在页面开始加入句即可

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

cache1.jsp 内容如下

没有缓存的日期:

每30秒刷新缓存一次的日期:

手动刷新缓存的日期:

手动刷新

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

缓存已刷新...

返回

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

...

6. 缓存过滤器 CacheFilter

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

CacheFilter

com.opensymphony.oscache.web.filter.CacheFilter

time

60

scope

session

CacheFilter

*.jsp

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

注意:如果要加入其它的属性的话只要添加一个标签对,在其中添加相应的属性,用法跟在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标签

:必须嵌套在标签中。

属性说明:

use

告诉所在的标签是否使用已经缓存的内容(缺省为true,使用缓存的内容)。可以使用这个标签来控制缓存。比如使用标签刷新某个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标签

:必须嵌套在标签中。

属性说明:

group

定义cache标签的group名称

示例代码如下:

... some jsp content ...

... some more jsp content ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值