cache是一种用于提高系统响应速度,改善系统运行性能的技术。尤其是在web应用中,通过缓存页面的输出结果,可以很显著的改善系统的运行性能。
OSCache由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。oscache是一个被广泛采用的高性能的j2EE缓存框架,oscache还能应用于任何java应用程序的普通缓存解决方案。
oscache特点:
1.缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。
2.拥有全面的API--OSCache API给你全面的程序来控制所有的OSCache特性。
3.永久缓存--缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。
4.支持集群--集群缓存数据能被单个的进行参数配置,不需要修改代码。
5.缓存记录的过期--你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不能满足需要时)
下面以网上一个很常见的例子为例,简单介绍一下OSCache的配置和使用过程:
1.安装过程
http://www.opensymphony.com下载OSCache,目前最新的是oscache-2.4.1-full版本。
从解压缩目录取得oscache.jar 文件放到 /WEB-INF/lib 或相应类库目录 目录中,
如果你的jdk版本为1.3.x,建议在lib中加入Apache Common Lib 的commons-collections.jar包,如jdk是1.4以上则不必
从etc目录取得oscache.properties 文件,放入src根目录
如你需要建立磁盘缓存,须修改oscache.properties 中的cache.path信息 (去掉前面的#注释)。
win类路径类似为c:\\app\\cache
unix类路径类似为/opt/myapp/cache
拷贝OSCache标签库文件oscache.tld(路径:oscache-2.4.1-full\etc\META-INF\) 到/WEB-INF/classes目录,应用发布之后要确定相应的目录下也应该有oscache.tld这个文件
现在你的应用目录类似如下:
$WEB_APPLICATION\WEB-INF\lib\oscache.jar
$WEB_APPLICATION\WEB-INF\classes\oscache.properties
$WEB_APPLICATION\WEB-INF\classes\oscache.tld
2.oscache.properties 文件配置向导
cache.memory=true
值为true 或 false ,默认为在内存中作缓存,
如设置为false,那cache只能缓存到数据库或硬盘中,那cache毫无意义
cache.capacity=1000
缓存元素个数
cache.persistence.class
持久化缓存类,如此类打开,则必须设置cache.path信息
cache.cluster 相关
为集群设置信息。

cache.cluster.multicast.ip为广播IP地址
cache.cluster.properties为集群属性

3.OSCache的基本用法
首先建立量个jsp页面cacheDemo1.jsp和cacheDemo2.jsp
cacheDemo1.jsp 内容如下
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/classes/oscache.tld" prefix="oscache"%>
<html>
<head><title>oscache实例</title></head>
<body>
没有缓存的日期:
<%=new Date()%>
<br>
<!--自动刷新-->
<oscache:cache time="30">
每30秒刷新缓存一次的日期: <%=new Date()%>
</oscache:cache>
<br>
<!--手动刷新-->
<oscache:cache key="testcache">
手动刷新缓存的日期: <%=new Date()%>
</oscache:cache>
<br>
<a href="cache2.jsp">手动刷新</a>
</body>
</html>

cacheDemo2.jsp 手动刷新页面:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/classes/oscache.tld" prefix="oscache"%>
<html>
<head><title>手工刷新</title></head>
<body>
缓存已刷新...<p>
<oscache:flush key="testcache" scope="application"/>
<a href="cacheDemo1.jsp">返回</a>
</body>
</html>

我们还可以通过下面语句定义Cache的有效范围:
<cache:cache time="30" scope="session">
...
</cache:cache>
如不定义scope,scope默认为Applcation

4. 缓存过滤器 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

注意:CacheFilter只捕获Http头为200的页面请求,即只对无错误请求作缓存,
而不对其他请求(如500,404,400)作缓存处理