使用OSCache优化程序性能

当数据更新较快或者页面具有很多风格,不便于用Velocity生成静态页面。因此,如果想提升程序的性能,我们可以采用一些缓存技术。例如:Hibernate的二级缓存技术,Oscache缓存技术。

首先,对比一下两者的优缺点。

Hibernate二级缓存(Model层/业务层,缓存domain对象):
    优点:可以做到实时更新数据。
    缺点:性能不如Oscache缓存,因为当请求过来时,调用Action-->Service-->从二级缓存里取数据-->jsp显示数据,走了一遍MVC流程。

Oscache缓存(View层,缓存HTML代码):
    优点:效率高。例如:电商网站的产品列表可以使用这门技术。因为当请求过来时,直接从缓存里取数据显示。
    缺点:不能做到实时更新数据,对于像订单模块要求数据必须实时更新并不适用。

下面的例子,将说明Oscache缓存技术的使用:

首先,jar包是必须的了,如下图:


使用OSCache优化程序性能_第1张图片


如果在三大框架开发环境下,就不用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秒。



你可能感兴趣的:(优化,性能,缓存,OScache)