﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-砖头-文章分类-oscache</title><link>http://www.blogjava.net/yaozhuan/category/8667.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 08:08:51 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 08:08:51 GMT</pubDate><ttl>60</ttl><item><title>应用OSCache提升J2EE系统运行性能 </title><link>http://www.blogjava.net/yaozhuan/articles/39747.html</link><dc:creator>砖头</dc:creator><author>砖头</author><pubDate>Fri, 07 Apr 2006 02:26:00 GMT</pubDate><guid>http://www.blogjava.net/yaozhuan/articles/39747.html</guid><wfw:comment>http://www.blogjava.net/yaozhuan/comments/39747.html</wfw:comment><comments>http://www.blogjava.net/yaozhuan/articles/39747.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yaozhuan/comments/commentRss/39747.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yaozhuan/services/trackbacks/39747.html</trackback:ping><description><![CDATA[
		<div class="content">
				<font size="2">Cache是一种用于提高系统响应速度、改善系统运行性能的技术。尤其是在Web应用中，通过缓存页面的输出结果，可以很显著的改善系统运行性能。本文中作者给大家介绍一个实现J2EE框架中Web应用层缓存功能的开放源代码项目----OSCache。通过应用OSCache，我们不但可以实现通常的Cache功能，还能够改善系统的稳定性。  <br />关键词：  Cache  系统性能<br />1面临的问题<br /><br />　1.1需要处理的特殊动态内容<br /><br />　　在信息系统建设过程中我们通常会遇到这样的问题：<br /><br />　　1.基础数据的变更问题<br /><br />　　　信息系统中需要处理的基础数据的内容短时间内是不会发生变化的，但是在一个相对长一些的时间里，它却可能是动态增加或者减少的。<br /><br />　　　举个例子：电子商务中关于送货区域的定义，可能短时间内不会发生变化，但是随着电子商务企业业务的扩大，系统中需要处理的送货区域就可能增加。所以我们的系统中不得不在每次向客户展示送货区域信息的时候都和数据库（假设送货区域信息保存在数据库中，这也是通常采用的处理方法）进行交互。<br /><br />　　2.统计报表（不仅限于统计报表）的问题<br /><br />　　　一般来说，统计报表是一个周期性的工作，可能是半个月、一个月或者更长的时间才会需要更新一次，然而统计报表通常是图形显示或者是生成pdf、word、excel等格式的文件，这些图形内容、文件的生成通常需要消耗很多的系统资源，给系统运行造成很大的负担。<br /><br />　1.2问题的共同点<br /><br />　　通过比较分析，不难发现这两类问题有一些共同点：<br /><br />　　1、被处理的内容短时间不变，所以短时间内可以作为静态内容进行处理<br /><br />　　2、在一个不太长的时间内，被处理的内容可能或者必定产生变化，所以必须将他们作为动态内容进行处理<br /><br />　　3、在合理的时间区段内可以忽略被处理内容变化后带来的影响<br /><br />　　4、对这些内容的处理动作比较消耗系统性能，影响系统响应时间<br /><br />　1.3  解决方法<br /><br />　　缓存技术可以帮助我们很好的解决这个问题：<br /><br />　　　1、缓存信息<br /><br />　　　当上述的基础数据或者统计报表第一次被访问时，被处理的内容被当作动态信息，基础数库从数据库中获得，统计报表也会被生成符合要求的图形、文件，然后这些信息都会被放入缓存信息中。<br /><br />　　　2、响应信息由缓存提供<br /><br />　　　当上述的基础数据或者统计报表继续被访问时，系统将会首先检查缓存信息中是否有对应的内容和我们设定的缓存规则，如果符合缓存信息存在而且符合缓存规则，给出的响应将来自于缓存信息，如果没有或者缓存信息已经不符合设定的要求，系统将重复上一步的动作。<br /><br />　　　很显然，上面的步骤2中，多数情况下，当用户请求到达时，被处理的内容将来自于缓存，所以大大的减少了与数据库的交互，或者不再需要为每个请求都生成一次报表图形或者文件，这部分工作的减少对于降低系统性能消耗、提高系统稳定性和并发处理能力是非常有益的。<br /><br />2　OSCache简介<br /><br />　　OSCache是OpenSymphony组织提供的一个J2EE架构中Web应用层的缓存技术实现组件，它的出现解决了我们面临的问题。<br /><br />　　OSCache目前最新的稳定版本是2.0，本文中的例子都是基于这个版本的，如果大家运行例子的过程中发生问题，请首先确认是否采用了正确的软件版本。<br /><br />　2.1主要特征<br /><br />　　1.兼容多种支持JSP的web服务器<br /><br />　　　已经通过兼容测试的web服务器包括OrionServer  (1.4.0或者以上版本)  、Macromedia  JRun  (3.0或者以上版本)  、BEA  Weblogic  (7.x或者以上版本)  、IBM  Websphere  (5.0版本)、Silverstream  (3.7.4版本)、Caucho  Resin  (1.2.3或者以上版本)、Tomcat  (4.0或者以上版本)  ，其他支持servlet2.3、jsp1.2的web服务器应该都是完全兼容OSCache的。<br /><br />　　2.可选的缓存区<br /><br />　　　你可以使用内存、硬盘空间、同时使用内存和硬盘或者提供自己的其他资源（需要自己提供适配器）作为缓存区。<br /><br />　　　1)使用内存作为缓存区将可以提供更好的性能<br /><br />　　　2)使用硬盘作为缓存区可以在服务器重起后迅速恢复缓存内容<br /><br />　　　3)同时使用内存和硬盘作为缓存区则可以减少对内存的占用<br /><br />　　3.灵活的缓存系统<br /><br />　　　　OSCache支持对部分页面内容或者对页面级的响应内容进行缓存，编程者可以根据不同的需求、不同的环境选择不同的缓存级别。<br /><br />　　4.容错<br /><br />　　　在一般的web应用中，如果某个页面需要和数据库打交道，而当客户请求到达时，web应用和数据库之间无法进行交互，那么将返回给用户  “系统出错”或者类似的提示信息，如果使用了OSCache的话，你可以使用缓存提供给用户，给自己赢得维护系统或者采取其他补救的时间。<br /><br />　　其它特性还包括对集群的支持、缓存主动刷新等特性，大家可以参考OpenSymphony网站上的其他资源获取更多的信息。<br /><br />3　OSCache组件的安装<br /><br />　　OSCache是一个基于web应用的组件，他的安装工作主要是对web应用进行配置，大概的步骤如下：<br /><br />　　1.下载、解压缩OSCache<br /><br />　　　请到OSCache的主页http://www.opensymphony.com/oscache/download.html下载Oscache的最新版本，作者下载的是OSCache的最新稳定版本2.0。<br /><br />　　　将下载后的。Zip文件解压缩到c:\oscache（后面的章节中将使用%OSCache_Home%来表示这个目录）目录下<br /><br />　　2.新建立一个web应用<br /><br />　　3.将主要组件%OSCache_Home%\oscache.jar放入WEB-INF\lib目录<br /><br />　　4.commons-logging.jar、commons-collections.jar的处理<br /><br />　　l、OSCache组件用Jakarta  Commons  Logging来处理日志信息，所以需要commons-logging.jar的支持，请将%OSCache_Home%\lib\core\commons-logging.jar放入classpath（通常意味着将这个文件放入WEB-INF\lib目录）<br /><br />　　２、如果使用JDK1.3,请将%OSCache_Home%\lib\core\commons-collections.jar放入classpath，如果使用JDK1.4或者以上版本，则不需要了<br /><br />　　5.将oscache.properties、oscache.tld放入WEB-INF\class目录<br /><br />　　　１、%OSCache_Home%\oscache.properties包含了对OSCache运行特征值的设置信息<br /><br />　　　２、%OSCache_Home%\oscache.tld包含了OSCache提供的标签库的定义内容<br /><br />6.修改web.xml文件<br /><br />在web.xml文件中增加下面的内容，增加对OSCache提供的taglib的支持：<br /><br />oscache<br /><br />/WEB-INF/classes/  oscache.tld<br /><br />4　开始使用OSCache中的缓存组件<br /><br />　OSCache中按照缓存范围的不同分为两种不同的方式：一种是缓存JSP页面中部分或者全部内容，一种是基于整个页面文件的缓存。<br /><br />　　　4.1JSP部分内容缓存<br /><br />　　　　4.1.1Cache—OSCache提供的缓存标签<br /><br />　　　　　这是OSCache提供的标签库中最重要的一个标签，包括在标签中的内容将应用缓存机制进行处理，处理的方式将取决于编程者对cache标签属性的设置。<br /><br />　　　　第一次请求到达时，标签中的内容被处理并且缓存起来，当下一个请求到达时，缓存系统会检查这部分内容的缓存是否已经失效，主要是以下几项：<br /><br />　　　　1.缓存时间超过了cache标签设置的time或者duration属性规定的超时时间<br /><br />　　　　2.cron属性规定的时间比缓存信息的开始时间更晚<br /><br />　　　　3.标签中缓存的内容在缓存后又被重新刷新过<br /><br />　　　　4.其他缓存超期设定<br /><br />　　　　如果符合上面四项中的任何一项，被缓存的内容视为已经失效，这时被缓存的内容将被重新处理并且返回处理过后的信息，如果被缓存的内容没有失效，那么返回给用户的将是缓存中的信息。<br /><br />cache标签的属性说明:<br /><br />key  –  标识缓存内容的关键词。在指定的作用范围内必须是唯一的。默认的key是被访问页面的URI和后面的请求字符串。<br /><br />你可以在同一个页面中使用很多cache标签而不指定他的key属性，这种情况下系统使用该页面的URI和后面的请求字符串，另外再自动给这些key增加一个索引值来区分这些缓存内容。但是不推荐采用这样的方式。<br /><br />scope  –  缓存发生作用的范围，可以是application或者session  <br /><br />time  –  缓存内容的时间段，单位是秒，默认是3600秒，也就是一个小时，如果设定一个负值，那么这部分被缓存的内容将永远不过期。  <br /><br />duration  –  指定缓存内容失效的时间，是相对time的另一个选择，可以使用简单日期格式或者符合USO-8601的日期格式。如：duration='PT5M'  duration='5s'等<br /><br />refresh  –  false  或者true。<br /><br />如果refresh属性设置为true，不管其他的属性是否符合条件，这部分被缓存的内容都将被更新，这给编程者一种选择，决定什么时候必须刷新。  <br /><br />mode  –  如果编程者不希望被缓存的内容增加到给用户的响应中，可以设置mode属性为“silent”<br /><br />其它可用的属性还包括：cron  、groups、language、refreshpolicyclass、refreshpolicyparam。<br /><br />上面的这些属性可以单独使用，也可以根据需要组合使用，下面的例子将讲解这些常用属性的使用方式。<br /><br />4.1.2Cache标签实例分析:<br /><br />1.最简单的cache标签用法<br /><br />使用默认的关键字来标识cache内容，超时时间是默认的3600秒<br /><br />2.用自己指定的字符串标识缓存内容，并且设定作用范围为session。<br /><br />3.动态设定key值，使用自己指定的time属性设定缓存内容的超时时间，使用动态refresh值决定是否强制内容刷新。<br /><br />因为OSCache使用key值来标识缓存内容，使用相同的key值将会被认为使用相同的的缓存内容，所以使用动态的key值可以自由的根据不同的角色、不同的要求决定使用不同的缓存内容。<br />4.设置time属性为负数使缓存内容永不过期<br /><br />5.使用duration属性设置超期时间<br /><br />6.使用mode属性使被缓存的内容不加入给客户的响应中<br /><br />4.2用CashFilter实现页面级缓存<br /><br />在OSCache组件中提供了一个CacheFilter用于实现页面级的缓存，主要用于对web应用中的某些动态页面进行缓存，尤其是那些需要生成pdf格式文件/报表、图片文件等的页面，不仅减少了数据库的交互、减少数据库服务器的压力，而且对于减少web服务器的性能消耗有很显著的效果。<br /><br />这种功能的实现是通过在web.xml中进行配置来决定缓存哪一个或者一组页面，而且还可以设置缓存的相关属性，这种基于配置文件的实现方式对于J2EE来说应该是一种标准的实现方式了。<br /><br />[注]  只有客户访问时返回http头信息中代码为200（也就是访问已经成功）的页面信息才能够被缓存<br /><br />1.缓存单个文件<br /><br />修改web.xml，增加如下内容，确定对/testContent.jsp页面进行缓存。<br />CacheFilter<br /><br />com.opensymphony.oscache.web.filter.CacheFilter<br /><br />CacheFilter<br /><br />/testContent.jsp<br /><br />2.缓存URL  pattern<br /><br />修改web.xml，增加如下内容，确定对*.jsp页面进行缓存。<br /><br /><br />CacheFilter<br /><br />com.opensymphony.oscache.web.filter.CacheFilter<br /><br />CacheFilter<br /><br />*.jsp<br /><br />3.自己设定缓存属性<br /><br />在页面级缓存的情况下，可以通过设置CacheFilter的初始属性来决定缓存的一些特性：<br /><br />time属性设置缓存的时间段，默认为3600秒，可以根据自己的需要只有的设置<br /><br />而scope属性设置，默认为application，可选项包括application、session<br /><br />CacheFilter<br /><br />com.opensymphony.oscache.web.filter.CacheFilter<br />time<br /><br />600<br /><br />scope    session<br /><br />CacheFilter<br />*.jsp<br /><br />5性能测试结果<br /><br />5.1测试环境<br /><br />系统平台：windows  2000  高级服务器/  P3  800  /512M内存<br /><br />web服务器：websphere  5.0<br /><br />数据库服务器：mysql  4.0.18-nt<br /><br />性能测试用工具：apache  Jmeter<br /><br />5.2测试计划<br /><br />l这次性能测试对比方为使用缓存和不使用缓存两种，他们的访问代码都是一样的：通过数据源从本地mysql数据库中获取person表的所有记录，然后显示在页面上。<br /><br />l测试中将模仿10个用户，每个用户发起5次请求，然后统计所有访问花费的时间。<br /><br />5.3测试结果    所有请求花费的总时间(毫秒)<br /><br />使用缓存后的测试结果          不使用缓存时的测试结果<br />20569                                                                  22870<br /><br />性能测试的详细结果请大家查看下载内容中的《不使用cache时的系统性能测试结果.txt》和《使用cache后系统性能测试结果.txt》<br /><br />6总结<br /><br />在J2EE系统中，我们经常需要处理一些特殊的动态内容，这些内容在一个时间段内的变更非常有限，但是又不得不将他们确定为动态内容进行输出，而且非常消耗数据库系统资源或者web服务器的资源，这时我们就可以采用Cache----一种用于提高系统响应速度、改善系统运行性能的技术----来优化我们的系统。尤其是在Web应用中，这种处理可以很显著的改善系统运行性能。<br /><br />本文中作者给大家介绍一个实现J2EE框架中Web应用层缓存功能的开放源代码项目----OSCache。它提供了在J2EE系统中实现缓存需要的丰富的功能。通过应用OSCache，我们不但可以实现通常的Cache功能、自由的设定cache的相关特性比如缓存时间段/缓存内容等，提升系统性能，而且还能有效的改善系统的稳定性。除此之外，OSCache组件还提供了更多的特性比如集群、容错、灵活的缓存区选择等。</font>
		</div>
<img src ="http://www.blogjava.net/yaozhuan/aggbug/39747.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yaozhuan/" target="_blank">砖头</a> 2006-04-07 10:26 <a href="http://www.blogjava.net/yaozhuan/articles/39747.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>应用OSCache</title><link>http://www.blogjava.net/yaozhuan/articles/39746.html</link><dc:creator>砖头</dc:creator><author>砖头</author><pubDate>Fri, 07 Apr 2006 02:24:00 GMT</pubDate><guid>http://www.blogjava.net/yaozhuan/articles/39746.html</guid><wfw:comment>http://www.blogjava.net/yaozhuan/comments/39746.html</wfw:comment><comments>http://www.blogjava.net/yaozhuan/articles/39746.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yaozhuan/comments/commentRss/39746.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yaozhuan/services/trackbacks/39746.html</trackback:ping><description><![CDATA[
		<font size="2">OSCache  是OpenSymphony组织提供的一种WEB应用层的缓存组件。OSCache提供了内存和磁盘的两种缓存存储机制，并且提供了集群机制。与JSP2.0自带的Cache标签相比，Oscache显得功能更加灵活，强大，比如硬盘缓存，以及在下面将会提到的cron表达式定制复杂而灵活的缓存失效时间等。<br /><br />首先，在TOMCAT发布一个名为test的应用，然后在http://www.opensymphony.com/oscache/download.html下载最新版本的OSCache。我下载的是oscache-2.1-full.zip。解压此文件把oscache-2.1.jar以及lib/core目录下的commons-collections-3.1.jar和commons-logging.jar文件拷贝到test应用的WEB-INF/LIB目录下。把etc/scache.properties和oscache.tld拷贝到test应用的WEB-INF/CLASSES目录下。<br /><br />修改web.xml文件，加入<br /></font>
		<table cellspacing="1" cellpadding="4" width="98%" align="center" bgcolor="#bad5ef" border="0">
				<form>
						<tbody>
								<tr>
										<td style="FONT-SIZE: 12px" bgcolor="#e6eef7" height="25">
												<font size="2">程序代码：</font>
										</td>
								</tr>
								<tr>
										<td style="FONT-SIZE: 12px" bgcolor="#ffffff">
												<font size="2">&lt;taglib&gt;<br />&lt;taglib-uri&gt;oscache&lt;/taglib-uri&gt;<br />&lt;taglib-location&gt;/WEB-INF/classes/oscache.tld&lt;/taglib-location&gt;<br />&lt;/taglib&gt; </font>
										</td>
								</tr>
						</tbody>
				</form>
		</table>
		<br />
		<font size="2">现在我们就可以使用OSCache了。<br /><br />一、几个在JSP中的基本用法<br /></font>
		<table cellspacing="1" cellpadding="4" width="98%" align="center" bgcolor="#bad5ef" border="0">
				<form>
						<tbody>
								<tr>
										<td style="FONT-SIZE: 12px" bgcolor="#e6eef7" height="25">
												<font size="2">程序代码：</font>
										</td>
								</tr>
								<tr>
										<td style="FONT-SIZE: 12px" bgcolor="#ffffff">
												<font size="2">&lt;cache:cache&gt;<br />&lt;%<br /><br />Syste.out.println(<span style="COLOR: #2a00ff">"Test OSCache!"</span>);<br /><span style="COLOR: #3f7f5f">//需要缓存的JSP代码，默认缓存时间是3600</span><br />%&gt;<br />&lt;/cache:cache&gt; <br /><br />&lt;cache:cache key=<span style="COLOR: #2a00ff">"first"</span> scope=<span style="COLOR: #2a00ff">"session"</span>&gt;<br />&lt;%<br /><span style="COLOR: #3f7f5f">//需要缓存的JSP代码，此处指定缓存作用的范围是session ，并且key值是first</span><br />%&gt;<br />&lt;/cache:cache&gt; <br /><br />&lt;cache:cache key=<span style="COLOR: #2a00ff">"first"</span> time=<span style="COLOR: #2a00ff">"600"</span> refresh=<span style="COLOR: #2a00ff">"&lt;%=needRefresh%&gt;"</span>&gt;<br />&lt;%<br /><span style="COLOR: #3f7f5f">//需要缓存的JSP代码，此处指定缓存的时间是600秒 ，</span><br /><span style="COLOR: #3f7f5f">//且通过一个参数动态判断是否需要缓存,如此处time为－1则被缓存的内容永不过期</span><br />%&gt;<br />&lt;/cache:cache&gt; <br />&lt;cache:cache key=<span style="COLOR: #2a00ff">"first"</span> cron=<span style="COLOR: #2a00ff">"0 2 * * *"</span> &gt;<br />&lt;%<br /><span style="COLOR: #3f7f5f">//通过Cron表达式指定每天的早上2点钟缓存的内容失效</span><br />%&gt;<br />&lt;/cache:cache&gt;<br /><br />&lt;cache:flush scope=<span style="COLOR: #2a00ff">"application"</span> /&gt; <span style="COLOR: #3f7f5f">//刷新application中的缓存</span><br />&lt;cache:flush scope=<span style="COLOR: #2a00ff">"session"</span> key=<span style="COLOR: #2a00ff">"first"</span> /&gt; //刷新session中的缓存</font>
										</td>
								</tr>
						</tbody>
				</form>
		</table>
		<font size="2"> <br /><br /><br />二、Cron表达式基本语法<br /><br />通过Cron表达式我们可以很灵活的设置缓存的失效时间，Cron表达式包括5个字段分别为Minute,Hour,  DOM(Day  Of  Month),  Month,DOW(Day  Of  Week)。他们顺序地对应了5个位置。当某个位置上的值为*时,表示该位置上的任意时间。另外还提供了指定时间的操作符号"-"，","，"/"，他们分别表示一段时间范围，具体的时间，以及递增的时间段。下面是几个例子说明一下Cron表达式的基本应用，有兴趣的也可以查看下OScache的doc文档。<br /><br />"10/20  *  *  *  *"  :因是第一个位置，并且是一个递增的表达式,所以表达式指定的是每个小时的第10分钟，第30分钟，第50分钟缓存内容失效。<br /><br />"*  8-18/4  *  *  *"  :指定每天早上8点到晚上6点之间，每4个小时缓存内容失效。    等同于"*  8,12,16  *  *  *"<br /><br />"*  *  *  *  1-5":表示每个星期一到星期五内容失效。<br /> <br />三、CashFilter的使用<br /><br />CashFilter是通过过滤器来缓存一个完整的JSP页面或者我们生成的二进制文件，包括生成的图片，EXCEL，WORLD，PDF等。<br /></font>
		<table cellspacing="1" cellpadding="4" width="98%" align="center" bgcolor="#bad5ef" border="0">
				<form>
						<tbody>
								<tr>
										<td style="FONT-SIZE: 12px" bgcolor="#e6eef7" height="25">
												<font size="2">程序代码：</font>
										</td>
								</tr>
								<tr>
										<td style="FONT-SIZE: 12px" bgcolor="#ffffff">
												<font size="2">&lt;filter&gt;<br />      &lt;filter-name&gt;CacheFilter&lt;/filter-name&gt;<br />&lt;filter-class&gt;com.opensymphony.oscache.web.filter.CacheFilter&lt;/filter-class&gt;<br />&lt;/filter&gt;<br />&lt;filter-mapping&gt;<br />&lt;filter-name&gt;CacheFilter&lt;/filter-name&gt;<br />&lt;!-需要缓存的JSP页面 --&gt;<br />      &lt;url-pattern&gt;/needCache.jsp&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt; </font>
										</td>
								</tr>
						</tbody>
				</form>
		</table>
		<br />
		<br />
		<br />
		<font size="2">注意：只有返回http头信息中代码为200（即成功状态）的才能被缓存。<br /><br />四、oscache.properties文件的配置<br /><br />cache.memory  指定是否使用内存缓存(默认为使用)<br />cache.persistence.class  当使用磁盘方式或数据库等其他方式缓存时指定<br />cache.path  当使用磁盘缓存时，须指定<br />cache.capacity  缓存大小<br />cache.unlimited.disk  对于磁盘缓存是否限制大小<br /></font>
<img src ="http://www.blogjava.net/yaozhuan/aggbug/39746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yaozhuan/" target="_blank">砖头</a> 2006-04-07 10:24 <a href="http://www.blogjava.net/yaozhuan/articles/39746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSCache使用指南</title><link>http://www.blogjava.net/yaozhuan/articles/36206.html</link><dc:creator>砖头</dc:creator><author>砖头</author><pubDate>Mon, 20 Mar 2006 01:58:00 GMT</pubDate><guid>http://www.blogjava.net/yaozhuan/articles/36206.html</guid><description><![CDATA[
		<font size="2">OSCache是当前运用最广的缓存方案，JBoss,Hibernate,Spring等都对其有支持，<br />下面简单介绍一下OSCache的配置和使用过程。<br /><br />1.安装过程<br />从http://www.opensymphony.com/oscache/download.html下载合适的OSCache版本，<br />我下载的是oscache-2.0.2-full版本。<br />解压缩下载的文件到指定目录<br /><br />从解压缩目录取得oscache.jar 文件放到 /WEB-INF/lib 或相应类库目录 目录中，<br />jar文件名可能含有版本号和该版本的发布日期信息等，如oscache-2.0.2-22Jan04.jar<br /><br />如果你的jdk版本为1.3.x,建议在lib中加入Apache Common Lib 的commons-collections.jar包。<br />如jdk是1.4以上则不必<br /><br />从src或etc目录取得oscache.properties 文件，放入src根目录或发布环境的/WEB-INF/classes 目录<br />如你需要建立磁盘缓存，须修改oscache.properties 中的cache.path信息 (去掉前面的#注释)。<br />win类路径类似为c:\\app\\cache<br />unix类路径类似为/opt/myapp/cache<br /><br />拷贝OSCache标签库文件oscache.tld到/WEB-INF/classes目录。<br /><br />现在你的应用目录类似如下：<br />$WEB_APPLICATION\WEB-INF\lib\oscache.jar<br />$WEB_APPLICATION\WEB-INF\classes\oscache.properties<br />$WEB_APPLICATION\WEB-INF\classes\oscache.tld<br /><br /><br />将下列代码加入web.xml文件中<br />&lt;taglib&gt;<br />&lt;taglib-uri&gt;oscache&lt;/taglib-uri&gt;<br />&lt;taglib-location&gt;/WEB-INF/classes/oscache.tld&lt;/taglib-location&gt;<br />&lt;/taglib&gt; <br /><br />为了便于调试日志输出，须加入commons-logging.jar和log4j-1.2.8.jar到当前类库路径中<br /><br />在src目录加入下面两个日志输出配置文件：<br />log4j.properties 文件内容为：<br />log4j.rootLogger=DEBUG,stdout,file<br /><br />log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br />log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br />log4j.appender.stdout.layout.ConversionPattern=[start]%d{yyyy/MM/dd/ HH:mm:ss}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n<br /><br /><br /><br />log4j.appender.file=org.apache.log4j.RollingFileAppender<br />log4j.appender.file.File=oscache.log<br />log4j.appender.file.MaxFileSize=100KB<br />log4j.appender.file.MaxBackupIndex=5<br />log4j.appender.file.layout=org.apache.log4j.PatternLayout<br />log4j.appender.file.layout.ConversionPattern=[start]%d{yyyy/MM/dd/ HH:mm:ss}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n<br /><br /><br />log4j.logger.org.apache.commons=ERROR<br />log4j.logger.com.opensymphony.oscache.base=INFO<br /><br /><br />commons-logging.properties 文件内容为<br /><br />org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog<br /><br />2.oscache.properties 文件配置向导 <br /><br />cache.memory<br />值为true 或 false ，默认为在内存中作缓存，<br />如设置为false，那cache只能缓存到数据库或硬盘中，那cache还有什么意义：）<br /><br />cache.capacity<br />缓存元素个数<br /><br />cache.persistence.class<br />持久化缓存类，如此类打开，则必须设置cache.path信息<br /><br />cache.cluster 相关<br />为集群设置信息。<br />如<br />cache.cluster.multicast.ip为广播IP地址<br />cache.cluster.properties为集群属性<br /><br /><br />3.OSCache的基本用法<br /><br />cache1.jsp 内容如下<br /><br />&lt;%@ page import="java.util.*" %&gt;<br />&lt;%@ taglib uri="oscache" prefix="cache" %&gt;<br /><br />&lt;html&gt;<br />&lt;body&gt;<br /><br />没有缓存的日期: &lt;%= new Date() %&gt;&lt;p&gt;<br />&lt;!--自动刷新--&gt;<br />&lt;cache:cache time="30"&gt;<br />每30秒刷新缓存一次的日期: &lt;%= new Date() %&gt; <br />&lt;/cache:cache&gt;<br />&lt;!--手动刷新--&gt;<br />&lt;cache:cache key="testcache"&gt;<br />手动刷新缓存的日期: &lt;%= new Date() %&gt; &lt;p&gt;<br />&lt;/cache:cache&gt;<br />&lt;a href="/cache2.jsp"&gt;手动刷新&lt;/a&gt;<br /><br />&lt;/body&gt;<br />&lt;/html&gt;<br /><br />cache2.jsp 执行手动刷新页面如下<br />&lt;%@ taglib uri="oscache" prefix="cache" %&gt;<br /><br />&lt;html&gt;<br />&lt;body&gt;<br /><br />缓存已刷新...&lt;p&gt;<br /><br />&lt;cache:flush key="testcache" scope="application"/&gt;<br /><br />&lt;a href="/cache1.jsp"&gt;返回&lt;/a&gt;<br /><br />&lt;/body&gt;<br />&lt;/html&gt;<br /><br /><br />你也可以通过下面语句定义Cache的有效范围,如不定义scope,scope默认为Applcation<br />&lt;cache:cache time="30" scope="session"&gt;<br />...<br />&lt;/cache:cache&gt;<br /><br />4. 缓存过滤器 CacheFilter <br /><br />你可以在web.xml中定义缓存过滤器，定义特定资源的缓存。<br />&lt;filter&gt;<br />&lt;filter-name&gt;CacheFilter&lt;/filter-name&gt;<br />&lt;filter-class&gt;com.opensymphony.oscache.web.filter.CacheFilter&lt;/filter-class&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;time&lt;/param-name&gt;<br />&lt;param-value&gt;60&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;scope&lt;/param-name&gt;<br />&lt;param-value&gt;session&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;/filter&gt;<br />&lt;filter-mapping&gt;<br />&lt;filter-name&gt;CacheFilter&lt;/filter-name&gt;<br />&lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;<br />上面定义将缓存所有.jsp页面，缓存刷新时间为60秒，缓存作用域为Session<br /><br />注意，CacheFilter只捕获Http头为200的页面请求，即只对无错误请求作缓存，<br />而不对其他请求（如500,404,400）作缓存处理 <br /></font>
<img src ="http://www.blogjava.net/yaozhuan/aggbug/36206.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yaozhuan/" target="_blank">砖头</a> 2006-03-20 09:58 <a href="http://www.blogjava.net/yaozhuan/articles/36206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>