首先,jar包是必须的了,如下图:
如果在三大框架开发环境下,就不用commons-logging这个jar了,因为框架已经有这个jar了。
在src下加入oscache.properties属性文件,下面为它配置属性的介绍:
cache.memory=false :指定是否使用内存缓存,默认值为true,即使用内存缓存。
cache.capacity=1000 : 指定缓存的容量,默认的容量是无限的,我把它的缓存数量设置为1000,超过这个数将不予缓存。
如果我们想要使用硬盘缓存,但是这种速度不如内存缓存快,如下设置:
cache.memory=false
cache.path=c:\\app\\cache //缓存保存的路径
cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.DiskPersistenceListener //设置持久化类
为了方便演示这门技术,我就不写Servlet了,我直接在WebRoot目录下创建一个oscache.jsp,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://www.opensymphony.com/oscache" prefix="oscache"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>oscache demo</title> </head> <body> <strong style="font-size: 30px;">缓存时间:</strong> <oscache:cache> <h1 style="color:blue"><%=new Date() %></h1> </oscache:cache> <hr/> <strong style="font-size: 30px;">当前时间:</strong><h1 style="color:red"><%=new Date() %></h1> </body> </html>
我们可以看出在<oscache:cache>标签体里面的内容已经被缓存了。
OSCache内部原理:其实它的缓存就是一个Map,将请求路径的URI作为Map的key,将标签体里的内容作为Map的value。
我们可以做一下实验,把访问路径后面加入一个参数,例如:?id=2,那么缓存的值将会发生变化。
我们也可以自己指定Key的值,设置标签的key属性就ok了,例如:<oscache:cache key="test">;我们还可以指定缓存范围,默认的范围是application,可以通过设置scope属性来指定缓存范围,例如:<oscache:cache scope="session">;我们还可以指定缓存时间,默认的缓存时间为3600秒,也就是一个小时,可以通过设置time属性来指定缓存时间,指定时间的单位也是秒,例如:<oscache:cache time="13">。
我们也可以强行清除缓存,例如:<oscache:cache refresh="${param.flag}">,我们可以通过URL重写给flag赋值,如果为true将清除缓存,如果为false,将不清除。
当需要清除很多页面缓存的时候,可以用<oscache:flush></oscache:flush>这个标签,可以指定这个标签的key属性,清除指定key的缓存,指定scope属性,清除指定范围的属性。
全局缓存的配置:
在web.xml中配置一个Filter,这个Filter应该放在所有Filter的前面,因为这样就不用执行后面的Filter和操作了,代码如下:
<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>7200</param-value> </init-param> <init-param> <param-name>scope</param-name> <param-value>application</param-value> </init-param> </filter> <filter-mapping> <filter-name>CacheFilter</filter-name> <url-pattern>/product/list/*</url-pattern> </filter-mapping>
这个Filter的含义是:为所有产品列表使用OScache缓存技术,范围是application的,缓存过期时间为7200秒。