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页面缓存的入门使用的更多相关文章

  1. OScached页面缓存知识总结一

    OSCache页面缓存 什么是OSCache? OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能.OSCache ...

  2. OScached页面缓存的概念和安装

    一.基本概述 OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能.OSCache是个一个广泛采用的高性能的J2EE ...

  3. 探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存)

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  4. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  5. cache-contro页面缓存处理设置

    <meta http-equiv="pragma" content="no-cache">,pragma与no-cache用于定义页面缓存,不缓存页 ...

  6. webform的页面缓存

    给页面添加<%@ OutputCache Duration="10" VaryByParam="*"%>标签就可以启用页面缓存. Duration表 ...

  7. 【WP开发】正确理解页面缓存

    注:本文内容面向Runtime App. 在新建项目后,细心观察,你会发现在App类中有以下代码: // TODO: 将此值更改为适合您的应用程序的缓存大小 rootFrame.CacheSize = ...

  8. [转]MVC3缓存之一:使用页面缓存

    本文转自:http://www.cnblogs.com/parry/archive/2011/03/19/OutputCache_In_MVC3.html 在以前的WebForm的开发中,在页面的头部 ...

  9. [转]Asp.net mvc 网站之速度优化 -- 页面缓存

    网站速度优化的一般方法 由于网站最重要的用户体验就是速度,特别是对于电子商务网站而言. 一般网站速度优化会涉及到几个方面: 1. 数据库优化 — 查询字段简历索引,使用数据库连接池和持久化,现在还有种 ...

随机推荐

  1. 单源最短路——dijkstra算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 问 ...

  2. windows编程常见数据类型

    windows编程常见数据类型, 总结一下方便查阅: 类型 对应指针 描述 ATOM . typedef WORD ATOM; BOOL LPBOOL 布尔类型,值要写成TRUE或FALSE,实际上是 ...

  3. Scrum1

    Scrum1 组员 任务分工 贡献 林泽宇 团队分工.撰写博客.修改完善需求规格说明书.整理代码规范 李涵 后端架构设计 尹海川 logo设计修改.数据库数据 郏敏杰 课堂展示.查阅资料.整理关键和难 ...

  4. DAY1敏捷冲刺

    站立式会议 工作安排 (1)服务器配置 (2)数据库建表 (3)页面初步样式设计 (4)主要页面之间的交互 燃尽图 代码提交记录 感想 林一心:后端云服务器的配置确实是一个挑战,目前还在摸索中 赵意: ...

  5. WPF 分页控件的实现 -用户控件

    效果图:

  6. Activiti5工作流笔记一

    介绍工作流 网上工作流的定义一大堆,这里就不去复制了,通俗的理解,工作流就是类似OA系统中请假审批.报销审批等一系列流程,下级提交的申请只有直系领导才能审批,其他人是没有权限的,而只有直系领导审批通过 ...

  7. JAVA的泛型与反射的联合应用

    通过泛型与反射的结合,可以编写框架来使开发更容易,这里演示的是BaseDao部分的简单使用. BaseDao部分代码: public abstract class BaseDao<T>{ ...

  8. 【题解】HNOI2018转盘

    何学长口中所说的‘一眼题’……然而实际上出出来我大HN全省也只有一个人A…… 首先我们需要发现一个性质:我们永远可以在最后一圈去标记所有的物品.倘若我们反复转圈,那么这完全是可以省下来的.所以我们破环 ...

  9. [CQOI2012]交换棋子 网络流

    ---题面--- 题解: 一开始很快想出了一个接近正解的建图方法,但其实是错误的,不过还是骗了70分_(:зゝ∠)_ 首先我们可以观察到棋子有限,但费用多种,其实也就相当于限制了流量,找最小费用 对于 ...

  10. BZOJ1059:[ZJOI2007]矩阵游戏——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1059 https://www.luogu.org/problemnew/show/P1129 小Q是 ...