首页 > 其他分享 >oscache缓存技术

oscache缓存技术

时间:2023-06-04 14:34:30浏览次数:58  
标签:缓存 标签 cache 技术 刷新 oscache OSCache




oscache缓存技术: [url]http://j2eemylove.iteye.com/blog/939828[/url]


[b]1、OSCache是什么? [/b]

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

[b]2、OSCache的特点 [/b]

(1) 缓存任何对象:你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。
(2) 拥有全面的API:OSCache API允许你通过编程的方式来控制所有的OSCache特性。
(3) 永久缓存:缓存能被配置写入硬盘,因此允许在应用服务器的多次生命周期间缓存创建开销昂贵的数据。
(4) [color=red]支持集群[/color]:集群缓存数据能被单个的进行参数配置,不需要修改代码。
(5) 缓存过期:你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不能满足需要时)。

[b]3、OSCache缓存的三种模式[/b]

[color=red](1)缓存于内存中

(2)缓存于硬盘中

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

[b]4、OSCache的安装与配置 [/b]
OSCache是当前运用最广的缓存方案,JBoss,Hibernate,Spring等都对其有支持,下面简单介绍一下OSCache的配置和使用过程。


[i]1.安装过程[/i]

从[url]http://www.opensymphony.com/oscache/download.html[/url]下载合适的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目录。



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


[i]


$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[/i]




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


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




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



cache.memory


值为true 或 false ,默认为在内存中作缓存,如设置为false,即将缓存的数据存到cache.path配置好的路径下.



cache.capacity


缓存元素个数



cache.persistence.class


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



cache.cluster 相关


为集群设置信息。






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


cache.cluster.properties为集群属性




[b]5.OSCache的基本用法[/b]



[i]1.OSCache标签的使用[/i]



注意:要使用标签必须在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>




[b]6. 缓存过滤器 CacheFilter[/b]



如果是对页面进行缓存则需要在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)作缓存处理



[b]7、主要的标签以及标签属性[/b]



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


属性说明:



[i]key[/i]


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



[i]scope[/i]


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



[i]time[/i]


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



[i]duration[/i]


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



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



[i]cron[/i]


指定缓存内容失效表达式。


通过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":表示每个星期一到星期五内容失效。



[i]refresh[/i]


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



[i]mode[/i]


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



[i]groups[/i]


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



[i]language[/i]


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



[i]refreshpolicyclass[/i]



指定自定义的刷新策略类的全限定类名。这个类继承自



com.opensymphony.oscache.web.WebEntryRefreshPolicy



[i]refreshpolicyparam[/i]


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



[i]usecached标签[/i]


<usecached />:必须嵌套在<cache>标签中。


属性说明:



use


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



[i]flush标签[/i]


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


属性说明:



[i]scope[all][/i]


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



[i]key[/i]


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



[i]group[/i]


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



[i]pattern[/i]


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



[i]language[/i]


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



[i]addgroup标签[/i]


<addgroup />:必须嵌套在<cache>标签中。


属性说明:



[i]group[/i]


定义cache标签的group名称



示例代码如下:


<oscache:cache key="test1">
    <oscache:addgroupgroup="group1" />
        ... some jsp content ...
    <oscache:addgroupgroup="group2" />
    ... some more jsp content ...
</oscache:cache>

标签:缓存,标签,cache,技术,刷新,oscache,OSCache
From: https://blog.51cto.com/u_3871599/6410600

相关文章

  • P2P技术基础: 关于TCP打洞技术
    4关于TCP打洞技术建立穿越NAT设备的p2p的TCP连接只比UDP复杂一点点,TCP协议的“打洞”从协议层来看是与UDP的“打洞”过程非常相似的。尽管如此,基于TCP协议的打洞至今为止还没有被很好的理解,这也造成了对其提供支持的NAT设备不是很多。在NAT设备支持的......
  • 催化燃烧技术
    吸附气法利用活性炭的物理特性吸附VOC有机废气,蜂窝活性炭比表面积大,吸附能力强。有机废气被吸附到活性炭的微孔中,使气体得到净化,净化后的气体通过风机排出;在解吸气体过程中,当活性炭的微孔吸附饱和后,就不能再被吸附。此时利用催化床产生的高温热风解吸活性炭,活性炭微孔中的有机......
  • 《信息技术》出题样例
    一、小组评价环节优点1、小组之间的相互评价,可以体现小组内学生的合作态度、合作方法、参与程度等,真正体现合作学习的优势。2、通过评价,小组作品的优点和缺点被指出来,学生可以认识到自己的优势和不足,从而相互学习,共同进步,在理论和操作技能方面都能有所提高。3、相对来说,学生之......
  • 踩坑|以为是Redis缓存没想到却是Spring事务!
    前言  最近碰到了一个Bug,折腾了我好几天。并且这个Bug不是必现的,出现的概率比较低。一开始我以为是旧数据的问题,就让测试重新生成了一下数据,重新测试。由于后面几轮测试均未出现,我也就没太在意。  可惜好景不长,测试反馈上次的问题又出现了。于是我立马着手排查,根据日志的表......
  • LRU缓存与LinkedHashMap源码
    今天再刷LeetCode时,遇到了第146题LRU缓存。题目如下:请你设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回关键字的值,否......
  • HTTP的缓存机制是什么?
    HTTP缓存机制是一种在Web开发中常用的技术,它旨在提高性能和减少网络流量。通过缓存,可以避免不必要的网络请求,减少服务器负载,并加快页面加载速度。下面是关于HTTP缓存机制的详细介绍。HTTP缓存机制的基本原理是将Web资源(如HTML、CSS、JavaScript、图像等)保存在客户端或中间......
  • MySQL数据库复制技术2
    一:复制的概念。    可能很多人认为,复制很简单就是把之前的数据直接转移到新的数据库当中不就是复制吗。但是在MySQL数据库中:复制指的就是复制一个服务器上(称为主节点服务器或者简称主节点)的所有改变到另一个服务器(称为从节点服务器或简称从节点)。复制通常用来创建主节点的一......
  • 盖瑞特发动机增压器大揭秘!隐藏在汽车引擎盖下的飞机发动机技术
    ......
  • Notepad++之"常用技术"
    一、^前面数据准备  二、$后面准备结果 ......
  • 大件货运系统源码,技术架构:spring boot、mybatis、redis、vue、element-ui
    网络货运平台源码网络货运平台的功能网络货运是指利用互联网平台,通过物流配送的方式进行商品销售和物流运输的一种新型商业模式。这种模式将传统的货运模式与互联网技术相结合,通过网络平台进行交易、物流配送和结算等一系列流程,从而实现货物的快速、高效、便捷地运输。技术架构:spr......