OScached页面缓存的入门使用
OSCache的使用:
一,环境的搭建:
1,把oscache.jar file放在 /WEB-INF/lib 目录下(Put the oscache.jar file in the /WEB-INF/lib directory)
2,如果commons-logging.jar文件不存在,也要把它放进/WEB-INF/lib 目录下
3,把/etc/oscache.properties放进类路径下
注意:Remember to escape any \ characters in Windows paths - e.g. if you want cache files to go in c:\cachedir, the cache.path property should be set to c:\ \cachedir.
二,OSCache 处理一个servlet Filter,使你能够很容易的缓存你网站的整个页面,甚至是二进制数据,二进制文件的缓存非常有用当他们被动态产生。
配置Filter:
Example1:时间是10minutes scope:Session
<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>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
Example2:默认缓存的scope是application,时间是一个小时
<filter>
<filter-name>CacheFilterStaticContent</filter-name>
<filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
<init-param>
<param-name>expires</param-name>
<param-value>time</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CacheFilterStaticContent</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
三 标签:
<%@ taglib uri="http://www.opensymphony.com/oscache" prefix="cache" %>
主要的标签有:
· cache- The main caching tag
· usecached- A nested tag to force using a cached version.
· flush- To flush caches programmatically.
· addgroup- It allows a single group name to be dynamically added to a cached block. This tag must be nested inside <cache:cache/>.
· addgroups- It allows a comma-delimited list of group names to be dynamically added to a cached block. This tag must be nested inside <cache:cache/>.
1.cache是OSCache主要的标签。根据指定的属性,标签的体将被缓存。以后每次运行标签,它会检查,看看缓存的内容是否过期,如果下列条件成立的话,标签体的内容将被认为是过时的:
1:标签体的内容超过了指定的缓存时间;默认为一小时,指定时以s为单位。
2:超多了cron属性指定的日期或时间;
3:通过flush标签,清除了指定的scope作用域的缓存。
如果缓存的主体内容是过期的,标签会再次执行和缓存新的主体内容。
属性:
① Key:这应该是为给定的范围内唯一的,因为重复的键映射到相同的缓存条目,因为缓存存放在map集合里面。key的默认值为使用URI转义版本和当前页面的查询字符串(默认值使用的URI转义版本和当前页面的查询字符串)。
② scope:缓存存放的作用域,默认为application。可选的值为session和application。
③ time:指定缓存存放的时间,以秒为单位,默认为3600s,即一个小时。如果为负值表示永远不过期。
④ duration:这是和time属性二选一的。Duration可以通过simple date format指定。
⑤ cron:cron表达式确定缓存的内容什么时候过期,它允许缓存的内容在特殊的日期或时间过期,而不是当缓存的内容达到某个年龄。
介绍cron表达式:cron表达式的语法:
cron表达式由下面5个字段组成:
Minute:指定缓存的内容在小时的第几分钟过期,取值范围是0-59;
Hour:指定缓存的内容在一天的第几个小时将过期,这是指定使用24小时制,因此取值范围是:0(午夜)-23(上午11点)。
DOM:一个月的第几天。这是一个从1到31的数,它表示缓存的内容什么日子过期,如:在每月的10号过期,应该把值设为10。
Month:一年的第几月使内容过期,它可以通过数字1-12或者月的英文名字(eg 'January')指定。月的名称对大小写是不敏感的,只考虑前三个字符,其他部分忽略。
DOW:一周的第几天使缓存的内容过期,它可以是数字(0-6,0=星期天,6=星期六)或者是英文的星期名称。和月份一样大小写是不敏感的,只考虑前三个字符,其他部分忽略。
注意:当你不想给某个字段给定特定的值,你可以使用"*"代替。
OSCache的也允许你选择性地指定每个字段内的列表,范围和时间间隔(甚至是三者的结合)
List:集合中的列表项通过","分隔,缓存过期的时间和每个列表项匹配,例如:"0,15,30,45 * * * *",表示缓存中的内容每隔15分钟过期一次。
Ranges:使用"-"指定范围。一个范围将包括所有值从开始到结束值(包括起始值)例如: "* * * Jan-June *"表示一年的前六个月缓存将过期。 Intervals:一个间隔通过"/"指定。左边的“/”字符的值表示的出发点或范围值应递增超过,而右边的值表示间隔的时间长度。例如:"10/20 * * * *" 相当于 "10,30,50 * * * *", 而"10-45/20 * * * *" 只匹配过去每个小时的10-30分钟,因为50已经超过了范围。
⑥ refresh:布尔值,如为true缓存将被刷新,不管缓存的内容是否过期。使你能决定是否重新缓存内容。
⑦ mode:如果把值设置为"silent",将防止标签体被写入到输出流。
⑧ groups:用逗号分隔组里面的名称,根据你的需要允许把缓存的条目分组。分组是非常有用的当你的缓存内容依赖应用或数据的其他部分,当这些依赖发生变化,flush相关的组将将导致所有缓存的条目在组中过期。
假设我们有一个类别的动态清单,我们从数据库中拉,我们也偶尔得到更新,通过调用一个WebService存储外币兑换利率。假设,我们也有一些
内容,显示有关类别和当前的汇率值的信息。下面缓存缓存主体内容的例子分配给2个缓存组 "currencyData"和"categoryList"。当汇率和类别
列表发生更新,相关的组将被flush因为这些内容(与任何其他与该组相关的内容)被过期了,然后当页面被访问的时候,再次建立缓存。
<cache:cache key="<%= product.getId() %>" time="-1" group="currencyData, categories">
... display category list ...
... display currency information ...
</cache:cache>
2,usecached 这个标签内嵌在一个<cache>标签中,表示<cache>标签是否使用cached version
属性:use:默认值为true,表示使用cached version,这是有用的对于编程式控制缓存。
例如:
This is a good example of error tolerance. If an exception occurs, the cached version of this content will be output instead.这是很好的容错例子,当异常发生缓存的内容将不会被输出。
<cache:cache>
<% try { %>
... some jsp content ...
<% } catch (Exception e) { %>
<cache:usecached />
<% } %>
</cache:cache>
例如:<cache:cache>
<%out.print(new Date()); %>
<cache:usecached use="true"/>
</cache:cache>
第一次访问的时候页面输出:Missing cached content ,如果接着把use改为false则会输出当前时间,当flush时,时间会改变。接着把use改为true,即使flush,时间也不会改变,它还会使用以前的缓存。
3,flush
这个标签是用来在运行时刷新缓存。这是特别有用,因为它可以将您的网站的管理部分编码,以便管理员可以决定何时刷新缓存。
属性:
Scope:这决定哪些范围将被刷新。有效值是“application”,“session”和null。空范围将刷新所有缓存,不论其范围。默认为all。
Key:当同时指定了key和scope,表示一个缓存条目被标记为flush。当他下次被访问的时候缓存将被refresh。当仅指定了key而没有指定scope这是无效的。
group :指定一组将导致组中的所有缓存项被flush,如果仅仅指定group没有指定scope这是无效的。
4,addgroup 必须内嵌在<cache:cache>标签内部,它允许一个组名,动态地添加到缓存的块中,
这将以key为test1的cache块增加到组group1和group2:
<cache:cache key="test1">
<cache:addgroup group="group1" />
... some jsp content ...
<cache:addgroup group="group2" />
... some more jsp content ...
</cache:cache>
5,addgroups 必须内嵌在<cache:cache>标签内部,
This will add the cache block with the key 'test1' to groups 'group1' and 'group2'.
<cache:cache key="test1">
... some jsp content ...
<cache:addgroups groups="group1,group2" />
... some jsp content ...
</cache:cache>
四 属性文件的配置:
介绍仅涵盖了OSCache的配置,使用的oscache.properties文件,下面的属性能够被设置在oscache.properties文件中:
Cache.memory:
有效值是真的还是假的,默认值为true。如果你想禁用内存缓存,只需要注释掉或删除此行。
禁用内存和磁盘缓存是可能的,而且相当愚蠢。
Cache.capacity:
缓存支持缓存条目的最大数量,默认情况下,容量是无限的。缓存将不会删除任何缓存条目。负的值也将意味着无限容量。
Cache.algorithm:
使用默认的缓存算法。请注意,为了使用一种算法,还必须指定缓存的大小,如果未指定缓存的大小,缓存算法将是无限的缓存,而不管这个属性的值,如果你指定了大小,但没有指定算法,所使用的缓存算法将为com.opensymphony.oscache.base.algorithm.LRUCache。
OSCache的目前带有三种算法:
com.opensymphony.oscache.base.algorithm.LRUCache --------最近最少使用。这是一个默认值当cache.capacity设置了值。
com.opensymphony.oscache.base.algorithm.FIFOCache --------先进先出。
com.opensymphony.oscache.base.algorithm.UnlimitedCache---------添加到缓存中的内容,是绝不会被丢弃的,这是默认值当 cache.capacity属性没有设置值。
Cache.blocking:
当一个请求一个过期的缓存条目,它可能被另一个线程正在重建该缓存的过程中。
此设置指定OSCache如何处理后来的“非重建缓存”的线程。
默认行为(cache.blocking = FALSE)是把过期内容给后面的线程,直到缓存条目已更新。这提供最佳的性能(仅仅花费稍微过时的数据服务的成本)。
当阻塞被启用,线程反而会阻塞,直到新的缓存条目准备提供,一旦新的条目放进了缓存中,阻塞的线程将重新启动并给予最新的缓存内容。
请注意,即使阻塞被禁用,当没有过期的数据可提供,线程将被阻塞直到通过线程把建立缓存的数据放进缓存内。
Cache.unlimited.disk:
指示磁盘缓存是否应无限制。默认值是false,在这种情况下,磁盘缓存也可以和内存缓存一样通过 cache.capacity属性设置缓存大小
Cache.persistence.class:
指定一个类用于持久化缓存条目。这个样的类必须实现PersistenceListener 接口。OSCache 有一个这样的实现提供了一个基于持久化的文件系统。设置这样的属性给com.opensymphony.oscache.plugins.diskpersistence.HashDiskPersistenceListener类去启用这个实现。你应该可以保存缓存数据使用像JDBC, LDAP. NOTE通过指定你自己的类。这个类的对象的哈希码和toString方法返回的值将被缓存用来生成缓存条目的文件名称。如果你喜欢可读的文件名称,父DiskPersistenceListener可以被使用,但那将产生一个问题,由于非法的文件系统字符和长长的名字。
注意:HashDiskPersistenceListener和DiskPersistenceListener类需要cache.path的设置,以便知道在哪里可以保存文件到磁盘。
Cache.path:
这指定缓存将存储在磁盘上的哪个目录,该目录将被创建,如果它不存在,但是要记住OSCache 必须要有权限往这个路径写内容。避免不同的缓存共享相同的缓存路径,因为OSCache没有被设计来处理这些问题。
注意:对于windows系统,反斜杠字符“\”需要被转义。(反斜杠\backslash ;斜杠/forwardslash)。例如:cache.path=c:\\myapp\\cache 。
cache.persistence.overflow.only (NEW! Since 2.1):
指示的持久性是否应该只发生一次内存缓存容量已达到。为了向后兼容默认值是false,但是推荐值是true当memory.cache被启用。这个属性大大改变了缓存的行为,在保存的缓存中将变的不同,那么内存中有什么。
OScached页面缓存的入门使用的更多相关文章
- OScached页面缓存知识总结一
OSCache页面缓存 什么是OSCache? OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能.OSCache ...
- OScached页面缓存的概念和安装
一.基本概述 OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能.OSCache是个一个广泛采用的高性能的J2EE ...
- 探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存)
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...
- cache-contro页面缓存处理设置
<meta http-equiv="pragma" content="no-cache">,pragma与no-cache用于定义页面缓存,不缓存页 ...
- webform的页面缓存
给页面添加<%@ OutputCache Duration="10" VaryByParam="*"%>标签就可以启用页面缓存. Duration表 ...
- 【WP开发】正确理解页面缓存
注:本文内容面向Runtime App. 在新建项目后,细心观察,你会发现在App类中有以下代码: // TODO: 将此值更改为适合您的应用程序的缓存大小 rootFrame.CacheSize = ...
- [转]MVC3缓存之一:使用页面缓存
本文转自:http://www.cnblogs.com/parry/archive/2011/03/19/OutputCache_In_MVC3.html 在以前的WebForm的开发中,在页面的头部 ...
- [转]Asp.net mvc 网站之速度优化 -- 页面缓存
网站速度优化的一般方法 由于网站最重要的用户体验就是速度,特别是对于电子商务网站而言. 一般网站速度优化会涉及到几个方面: 1. 数据库优化 — 查询字段简历索引,使用数据库连接池和持久化,现在还有种 ...
随机推荐
- Java学习个人备忘录之数组工具类
下面主要讲解一个针对数组操作的工具类. a.java -- 工具类文件 //按理来说要先编译本文件, 然后再编译主函数 class ArrayTool { /* 获取整型数组的最大值 */ publi ...
- Android 开发 之 JNI入门 - NDK从入门到精通
NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub - https://github.com/han1202012/NDKHelloworld.git -- Java传递参数给C ...
- databales详解(一)
学习可参考:http://www.guoxk.com/node/jquery-datatables http://yuemeiqing2008-163-com.iteye.com/blog/20069 ...
- LR脚本编写时的几个小技巧
参数化空值 如上图所示,当参数化时某个值需要为空值(非空格),直接在参数化文件中空一行/格即可,虽然Parameter List界面上没有显示空的那一行,但并不影响取值. 手工日志跟踪 lr_set_ ...
- C# 压缩组件介绍与入门
1.前言 作为吉日嘎拉权限管理系统最早的一批学习版用户,学了不少东西,在群里面也结识了很多朋友,更重要的是闲余时间,大家都发布很多可靠的外包工作.这次也是由于吉日嘎拉发布了一个有关“压缩文件损坏检测” ...
- Ehcache概念篇
前言 缓存用于提供性能和减轻数据库负荷,本文在缓存概念的基础上对Ehcache进行叙述,经实践发现3.x版本高可用性不好实现,所以我采用2.x版本. Ehcache是开源.基于缓存标准.基于java的 ...
- 【Python】python动态类型
在python中,省去了变量声明的过程,在引用变量时,往往一个简单的赋值语句就同时完成了,声明变量类型,变量定义和关联的过程,那么python的变量到底是怎样完成定义的呢? 动态类型 python使用 ...
- openstack之Glance介绍
什么是Glance glance即image service(镜像服务),是为虚拟机的创建提供镜像服务 为什么要有Glance 我们基于openstack是构建基本的Iaas平台对外提供虚机,而虚机在 ...
- CentOS LVM逻辑卷管理
在CentOS 挂载(U盘NTFS格式,新硬盘,增加交换分区,扩展根分区等)中扩展根分区部分用的就是LVM逻辑卷管理来进行扩展的. 1.为什么会有逻辑卷管理 传统磁盘管理是直接对硬盘分区进行访问,你如 ...
- [Leetcode] Construct binary tree from preorder and inorder travesal 利用前序和中续遍历构造二叉树
Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume tha ...