??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲av成人一区二区三区在线播放 ,亚洲国产精品久久66,亚洲中文字幕无码爆乳apphttp://www.tkk7.com/gen-sky/category/40687.htmll日昏昏醉梦_忽闻春尽强登山, 因过竚w逢僧话,偷得生半日闌Ӏ?/description>zh-cnWed, 08 Jul 2009 06:39:27 GMTWed, 08 Jul 2009 06:39:27 GMT60[转] osCache内部介绍 http://www.tkk7.com/gen-sky/articles/285823.html星期?/dc:creator>星期?/author>Tue, 07 Jul 2009 07:22:00 GMThttp://www.tkk7.com/gen-sky/articles/285823.htmlhttp://www.tkk7.com/gen-sky/comments/285823.htmlhttp://www.tkk7.com/gen-sky/articles/285823.html#Feedback0http://www.tkk7.com/gen-sky/comments/commentRss/285823.htmlhttp://www.tkk7.com/gen-sky/services/trackbacks/285823.html       转自Qhttp://blog.csdn.net/furthersun/archive/2008/09/19/2952329.aspx

1、摘?
本文档介l了如何?Portlet 应用中?OSCache q行面内容~存和对象缓存,分析?OSCache 的实现原理,q提Z一个用来缓存对象和面的简单易用的Ҏ。本文档不涉?OSCache 的安装与配置的内容,相关内容请参?OSCache ?在线文档 ?

2?OSCache ?
OSCache标记库由OpenSymphony设计Q它是一U开创性的~存ҎQ它提供了在现有JSP面之内实现内存~存的功能。OSCache是个一个被q泛采用的高性能的J2EE~存框架QOSCacheq能应用于Q何Java应用E序的普通的~存解决Ҏ?

OSCache有以下特点:

l      ~存M对象Q你可以不受限制的缓存部分jsp面或HTTPhQQ何java对象都可以缓存?

l      拥有全面的APIQOSCache API允许你通过~程的方式来控制所有的OSCacheҎ?

l      怹~存Q缓存能被配|写入硬盘,因此允许在应用服务器的多ơ生命周期间~存创徏开销昂贵的数据?

l      支持集群Q集缓存数据能被单个的q行参数配置Q不需要修改代码?

l      ~存q期Q你可以有最大限度的控制~存对象的过期,包括可插入式的刷新策略(如果默认性能不能满需要时Q?

3、OSCache ~存原理?nbsp;
            Cache Factory 
 
            Cache Proxy 
 
            Cache Map 
 
            Memory 
 
            Disk 
 

            Listeners 
 
            Cache Entry
 

?3-1 OSCache 架构概览

Cache Factory Q该实体负责获得 Cache Proxy Q兼有一些对 Cache Proxy 的管理功能。对应到现在? OSCache 实现中的cLQ?GeneralCacheAdministrator ?ServletCacheAdministrator ?

Cache Proxy Q该实体?Cache Map 的代理,它主要负责从 Cache Map 中取?/ 存储指定的缓存对象,如果~存对象q期Q那么就缓存刷斎ͼq向指定的监听者发送存 / 取事件。对应到现在?OSCache 实现中的cLQ? Cache ?ServletCache ?

Cache Map Q该实体存储了所有的~存实体Q是一?OSCache 专有?Map 实现Q它能根据指定的法清除~存Q以及将~存持久化到盘中。对应到现在?OSCache 实现中的cLQ?FIFOCache Q? LRUCache ?UnlimitedCache ?

Listeners Q?OSCache ?/ 取事件的监听者实体。对应到现在?OSCache 实现中的cLQ?CacheEntryEventListener ?CacheMapAccessEventListener ?

Cache Entry Q表C缓存对象的包装实体Q它包装了缓存对象和h{略。对应到现在?OSCache 实现中的cLQ?CacheEntry ?

3.1  应用场景
一个典型的“~存对象”场景是:

应用调用 Cache Factory 获得 Cache Proxy Q然后应用将要缓存的对象以及h{略通过 Cache Proxy 存储?Cache Map 中,q知各个 Listener ?

一个典型的“取得~存对象”的场景是Q?

应用调用 Cache Factory 获得 Cache Proxy Q然后给 Cache Proxy 的相应方法传入要获得的缓存对象的 key Q?Cache Proxy 会根据指定的h{略判断~存是否q期Q如果缓存没有过期,则返回缓存对象,如果~存q期Q则h~存Qƈ向应用层抛出需要刷新的异常Q? NeedsRefreshException Q,应用如果收到此异常,重新计内容ƈ内容缓存?

4、Web 应用中的~存Ҏ
4.1  假定
OSCache 现有的缓存刷新策略(过指定旉后自动过期,过指定日期后自动过期,按照克龙表达式的讑֮自动q期Q不能满需求。现有应用要求:当数据源的部分内Ҏ新后Q能够相关~存q期Q展现页面从数据源取得更新的内容昄?

4.2、方案应用场?
该方案ؓ下列场景提供了支持:

1Q?~存整个 Response Q能够定制刷新指定的 Response ?

2Q?~存 JSP 面内容Q能够定制刷新指定的~存内容?

3Q?~存对象Q能够定制刷新指定的~存对象?

4.3?配置
4.3.1  配置 ***CacheFilter
?Web 应用?web.xml 中添加下面的内容Q?

< filter>

              < filter-name>CacheFilter</filter-name>

              < filter-class>

                     com.***.portal.oscache.***CacheFilter

              </ filter-class>

              < init-param>

                     < param-name>time</param-name>

                     < param-value>-1</param-value>

              </ init-param>

              < init-param>

                     < param-name>scope</param-name>

定制q个 fileter ~存?response 的组
 
                     < param-value>application</param-value>

              </ init-param>

              <init-param>

                     <param-name>groups</param-name>

                     <param-value> landy </param-value>

              </init-param>

       </ filter>

< filter-mapping>

              < filter-name>CacheFilter</filter-name>

              < url-pattern>/ landy </ url-pattern>

       </ filter-mapping>
 

注意Q?

Z在部分数据更新时只刷新部?Response Q?***CacheFilter ?OSCache 提供?CacheFitler 增加了一个可配置的参敎ͼ“ groups ”Q部|者可以通过q个参数配置q个 filter 所映射?URLS 的组Q通常同一个组?URL 会从同时更新的数据源取数据)Q这样当数据源某部分更新之后Q我们就可以h从这部分数据源取数据?URLs 。该配置Ҏ持配|多个组Q以逗号作ؓ分隔W,如:“ group1,group2 ”?

其他的配|项说明请参?OSCache 在线文档?CacheFilter 配置部分 ?

4.4、缓存整?Response
OSCache 提供?CacheFilter 能够~存 Response Q但不能供应用选择性的h某些 Response Q?***CacheFilter p支持q一Ҏ?

4.4.1 使用Ҏ
您可以按照以下的方式h某一l( Filter 初始化参C groups 参数配置的内容)?Responses:

ServletCacheAdministrator admin = null;

Filter 初始化参C scope 参数配置的内?nbsp;
admin = ServletCacheAdministrator.getInstance(config

                           .getServletContext());

Filter 初始化参C groups 参数配置的内?
Cache cache = admin.getCache(httpRequest, cacheScope);

cache. flushGroup(group);
 

4.4.2   U束
q种Ҏ仅适用于普通的 web 应用Q不适用?Portlets 应用Q因为在 Portlets 应用中,每个 Portlet 都是面上一个可插拔的组Ӟ如果被缓存的 Response 代表的页面中某个 Portlet 被删除了Q那么这个页面生的 Response ׃不一P而这时应用却无法h~存?Response ?

4.5?~存 JSP 面内容
可以?JSP 面中将要缓存的内容|于 <cache></cache> 标签之间Q当更新数据源的事g产生Ӟ在处理事件的Ҏ中加入如下代码即可:

***OSCacheUtil.getInstance().flushGroup("group1");
 

4.5.1 样例
我要~存一个从数据源的 A 表取数据?JSP 内容D,如下表所C:

<oscache:cache key="foobar" scope="application" time="-1" groups="group1" >

//business code

Select * from table A and Display

</oscache:cache>
 

数据源更CQ在处理数据更新事g的代码中Q我加入下表的代码:

***OSCacheUtil.getInstance().flushGroup("group1");
 

q样可以刷新缓存的 group1 l的数据了?

4.5.2  U束
本方案在满?4.1 描述的需求的条g下,仅支持选择性的h存储?application 域( cache 标签?scope 属性配|ؓ application Q的~存。ؓ什么不支持选择性的h session 域的~存呢?是因为数据更新的事g产生是随机的Q当数据更新事g发生Ӟ我们无法得到 web 服务器中的每?session Q所以不能支持选择性的h session 域的~存?

4.6、缓存对?
可以?web 应用的业务处理逻辑中将要缓存的对象采用如下的方式将对象~存?application 域中Q?

***OSCacheUtil.getInstance().putInCache(key, content, new String[]{“group1”});
 

当更新数据源的事件生时Q在处理事g的方法中加入如下代码卛_Q?

***OSCacheUtil.getInstance().flushGroup("group1");
 

4.6.1  U束
?4.5.2 一致?

5、Demo
5.1  Ҏ框架
包括 ***CacheFilter ?***OSCacheUtil ?


5.2  试用例Q基?portlet Q?
用例 src Q?
用例 ear Q?

]]>
(?在Spring框架中用OSCache~存http://www.tkk7.com/gen-sky/articles/285816.html星期?/dc:creator>星期?/author>Tue, 07 Jul 2009 06:51:00 GMThttp://www.tkk7.com/gen-sky/articles/285816.htmlhttp://www.tkk7.com/gen-sky/comments/285816.htmlhttp://www.tkk7.com/gen-sky/articles/285816.html#Feedback0http://www.tkk7.com/gen-sky/comments/commentRss/285816.htmlhttp://www.tkk7.com/gen-sky/services/trackbacks/285816.html

?/span>Spring框架中?/span>OSCache~存

       是使用Spring提供?/span>springmodules?/span>OSCache来简化程序的开发,通过配置文g来完成提供缓存。参?/span>springmodules的文档?/span>

1、创?/span>Spring OSCache的配|?/span>xml文g

2?span style="color: #626262;">?/span>oscache.properties?/span>oscache.tld攑օWEB-INF"class目录Q?/span>q修改属性文件的参数

下边Spring OSCache配置信息来自http://www.javaeye.com/problems/7493

<?xml version="1.0" encoding="UTF-8" ?>  

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  

<beans>  

    <bean id="cacheManager" 

          class="org.springmodules.cache.provider.oscache.OsCacheManagerFactoryBean">  

        <!-- Optional properties -->  

        <property name="configLocation" value="classpath:oscache_config.properties"/>  

    </bean>  

    <bean id="cacheProviderFacade" 

          class="org.springmodules.cache.provider.oscache.OsCacheFacade">  

        <property name="cacheManager" ref="cacheManager"/>  

    </bean>  

 

    <bean id="cacheKeyGenerator" class="org.springmodules.cache.key.HashCodeCacheKeyGenerator"/>  

 

    <bean id="userDaoProxy" 

          class="org.springmodules.cache.interceptor.proxy.CacheProxyFactoryBean">  

        <property name="cacheProviderFacade" ref="cacheProviderFacade"/>  

        <property name="cacheKeyGenerator" ref="cacheKeyGenerator"/>  

        <property name="cachingModels">  

            <props>  

                <prop key="get*">refreshPeriod=12;groups=user</prop>  

            </props>  

        </property>  

        <property name="flushingModels">  

            <props>  

                <prop key="update*">groups=user</prop>  

                <prop key="delete*">groups=user</prop>  

                <prop key="add*">groups=user</prop>  

            </props>  

        </property>  

 

        <property name="cachingListeners">  

            <list>  

                <!--ref bean="cachingListener" /-->  

            </list>  

        </property>  

        <property name="target" ref="userDaoTarget"/>  

    </bean>  

 

 

   <bean id="userDaoTarget" class="com.logictown.BHT.dao.springJdbc.UserDaoImpl">  

        <property name="dataSource" ref="dataSource"/>  

    </bean>  

 

</beans> 




]]>
[转]应用OSCache提升J2EEpȝq行性能http://www.tkk7.com/gen-sky/articles/285811.html星期?/dc:creator>星期?/author>Tue, 07 Jul 2009 06:43:00 GMThttp://www.tkk7.com/gen-sky/articles/285811.htmlhttp://www.tkk7.com/gen-sky/comments/285811.htmlhttp://www.tkk7.com/gen-sky/articles/285811.html#Feedback0http://www.tkk7.com/gen-sky/comments/commentRss/285811.htmlhttp://www.tkk7.com/gen-sky/services/trackbacks/285811.html
1.1 需要处理的Ҏ动态内?


在信息系l徏设过E中我们通常会遇到这L问题Q?

1. 基础数据的变更问?

信息pȝ中需要处理的基础数据的内容短旉内是不会发生变化的,但是在一个相寚w一些的旉里,它却可能是动态增加或者减的?

举个例子Q电子商务中关于送货区域的定义,可能短时间内不会发生变化Q但是随着电子商务企业业务的扩大,pȝ中需要处理的送货区域可? 增加。所以我们的pȝ中不得不在每ơ向客户展示送货区域信息的时候都和数据库Q假N货区域信息保存在数据库中,q也是通常采用的处理方法)q行交互?

2. l计报表Q不仅限于统计报表)的问?

一般来_l计报表是一个周期性的工作Q可能是半个月、一个月或者更长的旉才会需要更Cơ,然而统计报表通常是图形显C或者是生成pdf、word、excel{格式的文gQ这些图形内宏V文件的生成通常需要消耗很多的pȝ资源Q给pȝq行造成很大的负担?

1.2 问题的共同点


通过比较分析Q不隑֏现这两类问题有一些共同点Q?

1、被处理的内容短旉不变Q所以短旉内可以作为静态内容进行处?

2、在一个不太长的时间内Q被处理的内容可能或者必定生变化,所以必d他们作ؓ动态内容进行处?

3、在合理的时间区D内可以忽略被处理内容变化后带来的媄?

4、对q些内容的处理动作比较消耗系l性能Q媄响系l响应时?

1.3 解决Ҏ


~存技术可以帮助我们很好的解决q个问题Q?

1、缓存信?

当上q的基础数据或者统计报表第一ơ被讉KӞ被处理的内容被当作动态信息,基础数库从数据库中获得,l计报表也会被生成符合要求的囑Ş、文Ӟ然后q些信息都会被放入缓存信息中?

2、响应信息由~存提供

当上q的基础数据或者统计报表l被讉KӞpȝ会首先查缓存信息中是否有对应的内容和我们设定的~存规则Q如果符合缓存信息存在而且W合~存规则Q给出的响应来自于~存信息Q如果没有或者缓存信息已l不W合讑֮的要求,pȝ重复上一步的动作?

很显Ӟ上面的步?中,多数情况下,当用戯求到达时Q被处理的内容将来自于缓存,所以大大的减少了与数据库的交互Q或者不再需要ؓ每个h都生成一ơ报表图形或者文Ӟq部分工作的减少对于降低pȝ性能消耗、提高系l稳定性和q发处理能力是非常有益的?

2 OSCache?


OSCache是OpenSymphonyl织提供的一个J2EE架构中Web应用层的~存技术实现组Ӟ它的出现解决了我们面临的问题? OSCache目前最新的E_版本?.0Q本文中的例子都是基于这个版本的Q如果大家运行例子的q程中发生问题,请首先确认是否采用了正确的Y件版本?

2.1 主要特征


1. 兼容多种支持JSP的web服务?

已经通过兼容试的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或者以上版? Q其他支持servlet2.3、jsp1.2的web服务器应该都是完全兼容OSCache的?

2. 可选的~存?

你可以用内存、硬盘空间、同时用内存和盘或者提供自q其他资源Q需要自己提供适配器)作ؓ~存区?

使用内存作ؓ~存区将可以提供更好的性能
使用盘作ؓ~存区可以在服务器重起后q速恢复缓存内?
同时使用内存和硬盘作为缓存区则可以减对内存的占?
3. 灉|的缓存系l?

OSCache支持寚w分页面内Ҏ者对面U的响应内容q行~存Q编E者可以根据不同的需求、不同的环境选择不同的缓存别?

4. 定w

在一般的web应用中,如果某个面需要和数据库打交道Q而当客户h到达Ӟweb应用和数据库之间无法q行交互Q那么将q回l用? pȝ出错"或者类似的提示信息Q如果用了OSCache的话Q你可以使用~存提供l用Pl自p得维护系l或者采取其他补救的旉?

其它Ҏ还包括寚w的支持、缓存主动刷新等Ҏ,大家可以参考OpenSymphony|站上的其他资源获取更多的信息?

3 OSCachelg的安?


OSCache是一个基于web应用的组Ӟ他的安装工作主要是对web应用q行配置Q大概的步骤如下Q?

1. 下蝲、解压羃OSCache

请到OSCache的主http://www.opensymphony.com/oscache/download.html下蝲Oscache的最新版本,作者下载的是OSCache的最新稳定版?.0?

下载后的。Zip文g解压~到c:"oscacheQ后面的章节中将使用%OSCache_Home%来表C个目录)目录?

2. 新徏立一个web应用

3. 主要组?OSCache_Home%"oscache.jar攑օWEB-INF"lib目录

4. commons-logging.jar、commons-collections.jar的处?

OSCachelg用Jakarta Commons Logging来处理日志信息,所以需要commons-logging.jar的支持,请将%OSCache_Home%"lib"core"commons-logging.jar攑օclasspathQ通常意味着这个文件放入WEB-INF"lib目录Q?
如果使用JDK1.3,请将%OSCache_Home%"lib"core"commons-collections.jar攑օclasspathQ如果用JDK1.4或者以上版本,则不需要了
5. oscache.properties、oscache.tld攑օWEB-INF"class目录

%OSCache_Home%"oscache.properties包含了对OSCacheq行特征值的讄信息
%OSCache_Home%"oscache.tld包含了OSCache提供的标{ֺ的定义内?
6. 修改web.xml文g

在web.xml文g中增加下面的内容Q增加对OSCache提供的taglib的支持:

<taglib>
<taglib-uri>oscache</taglib-uri>
<taglib-location>/WEB-INF/classes/ oscache.tld</taglib-location>
</taglib>




4 开始用OSCache中的~存lg


OSCache中按照缓存范围的不同分ؓ两种不同的方式:一U是~存JSP面中部分或者全部内容,一U是Z整个面文g的缓存?

4.1 JSP部分内容~存


4.1.1 Cache-OSCache提供的缓存标{?


q是OSCache提供的标{ֺ中最重要的一个标{,包括在标{中的内容将应用~存机制q行处理Q处理的方式取决于~程者对cache标签属性的讄?

W一ơ请求到达时Q标{中的内容被处理q且~存hQ当下一个请求到达时Q缓存系l会查这部分内容的缓存是否已l失效,主要是以下几:

1. ~存旉过了cache标签讄的time或者duration属性规定的时旉
2. cron属性规定的旉比缓存信息的开始时间更?
3. 标签中缓存的内容在缓存后又被重新hq?
4. 其他~存期讑֮
如果W合上面四项中的M一,被缓存的内容视ؓ已经失效Q这时被~存的内容将被重新处理ƈ且返回处理过后的信息Q如果被~存的内Ҏ有失效,那么q回l用L是~存中的信息?

cache标签的属性说?

key - 标识~存内容的关键词。在指定的作用范围内必须是唯一的。默认的key是被讉K面的URI和后面的h字符丌Ӏ?

你可以在同一个页面中使用很多cache标签而不指定他的key属性,q种情况下系l用该面的URI和后面的h字符Ԍ另外再自动给q些key增加一个烦引值来区分q些~存内容。但是不推荐采用q样的方式?

scope - ~存发生作用的范_可以是application或者session

time - ~存内容的时间段Q单位是U,默认?600U,也就是一个小Ӟ如果讑֮一个负|那么q部分被~存的内容将永远不过期?

duration - 指定~存内容失效的时_是相对time的另一个选择Q可以用简单日期格式或者符合USO-8601的日期格式。如Qduration='PT5M' duration='5s'{?

refresh - false 或者true?

如果refresh属性设|ؓtrueQ不其他的属性是否符合条Ӟq部分被~存的内定w被更新Q这l编E者一U选择Q决定什么时候必d新?

mode - 如果~程者不希望被缓存的内容增加到给用户的响应中Q可以设|mode属性ؓ"silent"

其它可用的属性还包括Qcron 、groups、language、refreshpolicyclass、refreshpolicyparam?

上面的这些属性可以单独用,也可以根据需要组合用,下面的例子将讲解q些常用属性的使用方式?

4.1.2 Cache标签实例分析:


1. 最单的cache标签用法

使用默认的关键字来标识cache内容Q超时时间是默认?600U?

<cache:cache>
<%
//自己的JSP代码内容
%>
</cache:cache>
2. 用自己指定的字符串标识缓存内容,q且讑֮作用范围为session?
<cache:cache key="foobar" scope="session">
<%
//自己的JSP代码内容
%>
</cache:cache>
3.动态设定key|使用自己指定的time属性设定缓存内容的时旉Q用动态refresh值决定是否强制内容刷新?

因ؓOSCache使用key值来标识~存内容Q用相同的key值将会被认ؓ使用相同的的~存内容Q所以用动态的key值可以自qҎ不同的角艌Ӏ不同的要求军_使用不同的缓存内宏V?

<cache:cache key="<%= product.getId() %>" time="1800" refresh="<%= needRefresh %>">
<%
//自己的JSP代码内容
%>
</cache:cache>
4. 讄time属性ؓ负数使缓存内Ҏ不过?
<cache:cache time="-1">
<%
//自己的JSP代码内容
%>
5. 使用duration属性设|超期时?
<cache:cache duration='PT5M'>
<%
//自己的JSP代码内容
%>
6. 使用mode属性被缓存的内容不加入给客户的响应中
<cache:cache mode='silent'>
<%
//自己的JSP代码内容
%>
4.2 用CashFilter实现面U缓?
在OSCachelg中提供了一个CacheFilter用于实现面U的~存Q主要用于对web应用中的某些动态页面进行缓存,其是那些需? 生成pdf格式文g/报表、图片文件等的页面,不仅减少了数据库的交互、减数据库服务器的压力Q而且对于减少web服务器的性能消耗有很显著的效果?

q种功能的实现是通过在web.xml中进行配|来军_~存哪一个或者一l页面,而且q可以设|缓存的相关属性,q种Z配置文g的实现方式对于J2EE来说应该是一U标准的实现方式了?

[注] 只有客户讉K时返回http头信息中代码?00Q也是讉K已经成功Q的面信息才能够被~存

1. ~存单个文g

修改web.xmlQ增加如下内容,定?testContent.jsp面q行~存?

<filter>
<filter-name>CacheFilter</filter-name>
<filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<!-?testContent.jsp面内容q行~存-->
<url-pattern>/testContent.jsp</url-pattern>
</filter-mapping>
2. ~存URL pattern

修改web.xmlQ增加如下内容,定?.jsp面q行~存?
<filter>
<filter-name>CacheFilter</filter-name>
<filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<!-Ҏ有jsp面内容q行~存-->
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
3. 自己讑֮~存属?

在页面~存的情况下Q可以通过讄CacheFilter的初始属性来军_~存的一些特性:time属性设|缓存的旉D,默认? 3600U,可以Ҏ自己的需要只有的讄Q而scope属性设|,默认为applicationQ可选项包括application、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>
<!-Ҏ有jsp面内容q行~存-->
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
5 性能试l果


5.1 试环境


pȝq_Qwindows 2000 高服务? P3 800 /512M内存

web服务器:websphere 5.0

数据库服务器Qmysql 4.0.18-nt

性能试用工Papache Jmeter

5.2 试计划


q次性能试Ҏ方ؓ使用~存和不使用~存两种Q他们的讉K代码都是一LQ通过数据源从本地mysql数据库中获取person表的所有记录,然后昄在页面上?

试中将模仿10个用P每个用户发v5ơ请求,然后l计所有访问花费的旉?

5.3 试l果


使用~存后的试l果 不用缓存时的测试结?

所有请求花费的L?毫秒) 20569 22870

性能试的详l结果请大家查看下蝲内容中的《不使用cache时的pȝ性能试l果.txt》和《用cache后系l性能试l果.txt?

6 ȝ


在J2EEpȝ中,我们l常需要处理一些特D的动态内容,q些内容在一个时间段内的变更非常有限Q但是又不得不将他们定为动? 内容q行输出Q而且非常消耗数据库pȝ资源或者web服务器的资源Q这时我们就可以采用Cache----一U用于提高系l响应速度、改善系l运行性能? 技?---来优化我们的pȝ。尤其是在Web应用中,q种处理可以很显著的改善pȝq行性能?

本文中作者给大家介绍一个实现J2EE框架中Web应用层缓存功能的开放源代码目----OSCache。它提供了在J2EEpȝ 中实现缓存需要的丰富的功能。通过应用OSCacheQ我们不但可以实现通常的Cache功能、自q讑֮cache的相关特性比如缓存时间段/~存内容 {,提升pȝ性能Q而且q能有效的改善系l的E_性。除此之外,OSCachelgq提供了更多的特性比如集、容错、灵zȝ~存区选择{?

作者根据自q使用l验l大家提供了一些简单的例子Q他们部分演CZ如何使用OSCachelg提供的丰富特性,OSCache提供的特性远不止q些Q需要大家在今后的时间里深入的研IӞ同时也希望大安过E-mail和作者A献研I成果?nbsp;


]]>
【{】OSCache?/title><link>http://www.tkk7.com/gen-sky/articles/285801.html</link><dc:creator>星期?/dc:creator><author>星期?/author><pubDate>Tue, 07 Jul 2009 05:48:00 GMT</pubDate><guid>http://www.tkk7.com/gen-sky/articles/285801.html</guid><wfw:comment>http://www.tkk7.com/gen-sky/comments/285801.html</wfw:comment><comments>http://www.tkk7.com/gen-sky/articles/285801.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/gen-sky/comments/commentRss/285801.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gen-sky/services/trackbacks/285801.html</trackback:ping><description><![CDATA[一.OSCache?br /> OSCache是OpenSymphonyq个开源项目众多Projects中的一个。他是一个高效的J2EE~存框架Q能够很好的解决动态网站速度的问题。下面来<br /> 看下OSCache解决了动态网站的哪些令h郁闷的问题?br /> 1.~存动态内容:其实我们的动态网上一般只有一部分是动态的Q表_表尾一般是不变的)Q如果我们缓存整个网|然不成,因ؓ有部分是<br /> 随着h有可能变的。OSCache提供的方式是允许我们只缓存一部分|页?br /> <br /> 2.~存2q制内容Q生的囄和PDF文g在服务器加蝲的时候非常的耗时。OSCache解决q个问题是通过一个Servlet2.3的缓存过滤功能,然后?br /> 够缓存Q意的URIQ比如一个完整的面或者是一个生的囄/PDF文gQ?br /> <br /> 3.定wQ有q种情况或许我们会遇刎ͼ是当一个动态的|页出现错误。即便我们的面?5%都加载完毕,但就是由于这个错误,整个面׃<br /> q回错误的提C或面。OSCache允许我们提供出现错误时的~存内容Q如果出现就适时的提C出来了?br /> <br /> 除了上面的这些Servlet的特征外QOSCache完全可以充当M一个javaE序的缓存方案。OSCache 的一般特征如下:<br /> 1.~存L对象Q可以不受限制的~存JSP的一部分或是HttphQQ何的Java对象都可以被~存?br /> <br /> 2.全面的APIQ通过API可以完完全全的控制OSCache的Q何特性?br /> <br /> 3.持久~存Q我们可以把认ؓ重要的数据缓存到盘上?br /> <br /> 4.支持集群Q集缓存数据能被单个的q行参数配置Q不需要修改代码?br /> <br /> 5.~存记录的过期:你可以有最大限度的控制~存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时Q?br /> <br /> ?OSCacheq行环境<br /> 如果用到OSCache Tag Library的话Q需要Servlet2.3和JSP1.2的支持。如果是直接用OSCache API的话那么׃需要Servlet容器的支持?br /> 目前可以正常q行的Web容器Q?br /> 1.OrionServer(版本1.4.0和更?<br /> 2.JRun(3.0或更?<br /> 3.WebLogic(8.1或以?<br /> 4.Websphere(5.0或以?<br /> 5.Resin(1.2.3或以?<br /> 6.TomCat(4.0或以?<br /> 7.iPlanet(6.0或以?<br /> 用到~存qo需要Servlet2.3支持.目前知道的可以个工作在OrionServer,WebLogic,Tomcat?<br /> OSCache需要Java的版本至是java 1.4.<br /> <br /> ?OSCache的安?br /> 1.解压oscache-2.4.1-full<br /> 2.把oscache-2.4.1.jar攑ֈ/WEB-INF/lib?<br /> 3.要确保commons-logging.jar也在环境变量?一般情况下他也攑֜/WEB-INF/lib?<br /> 4.?etc/oscache.properties攑օ/WEB-INF/classes?如果用的Eclipse的话,新徏一个Source Folder比如叫Src_Config,然后p个OSCache的属性文件放在其?通过修改q个OSCache的配|文件可以改变文件缓存的盘路径,配置持久侦听{等.<br /> 5.把etc/META-INF/oscache.tld也放?WEB-INF/classes?<br /> <br /> ?OSCache应用学习<br /> 1.JSP的应?br /> 要是惛_用OSCache的标{?我们必须先要引入q来.方式有两U?<br /> 其一.在web.xml中加?<br /> <taglib><br />      <taglib-uri>oscache</taglib-uri><br />      <taglib-location>/WEB-INF/classes/oscache.tld</taglib-location><br /> </taglib><br /> 然后我们在JSp中就可以<%@ taglib uri="oscache" prefix="os"%>q样来引用了.<br /> 其二,直接引用.直接在JSp中加入OSCache的标{ֺ引用<br /> <%@ taglib uri="/WEB-INF/classes/oscache.tld" prefix="os"%>.如果要进入官方的标签库的话也?<%@ taglib uri="http://www.opensymphony.com/oscache" prefix="cache" %>q样׃用再把oscache.tld攑֜/WEB-INF/classes下了.<br /> 目前OSCache?个标{?他们是cache, usecached, flush, addgroup, addgroups.下面我们来分别介l一下他们的属性和用法.<br /> <cache></cache><br /> 他是OSCache中最主要的标{了.括v来的内容根据属性的讄来缓存v?W一ơ执行的时?OSCache会把cache标签中的JSp执行q且~存h,以后再执行的?他会首先判断~存的内Ҏ否过?如果q期那么会从新执行ƈ~存.否则q接从~存中读?判定q期的条件如?<br /> i.~存的内容超q了属性time所指定的时?<br /> ii.不符合cron讄的时间间?<br /> iii.如果scope指定的范围刷新的?则认期了.如Sessionq期.<br /> 属性如?<br /> key    : ~存的Key,可以是Q何的字符,用来L~存的内容用?可以理解成HashMap中的Key.不能?个要~存的东东定义成一个名?那样后一个会覆盖前一个的内容.默认情况,如果不指定Key的话,OSCache也会自动生成一个Key,规则是请求的URI+当前面的Query String.<br /> scope   : ~存的范??? application和session.默认值是application.<br /> time    : ~存内容的时?以秒为单?默认?600U?C指定的时?׃h~存内容.如果指定一个负数的?意味着永远不会q期.<br /> duration : 也是用来指定~存内容的时?它和time属性只能是2?,它的特点是可以用Simple Data Format 或者是ISO-8601q行日期格式?<br /> cron    : 用万q历的Ş式指定缓存内容何时过期的.它应用的Unix的万q历形式,?"0 * * * *")<br /> refresh   : 是个Boolean?如果是True的话,则不前面提到的q期?都刷?默认情况是false.<br /> mode    : 讄q项?#8221;silent”防止把括v来的内容输出.q在你预加蝲~存内容而不愿显C给用户看到时很有用.<br /> groups   : 可以提供一个以逗号分割的组名称.如group="A, B".q将允许你以l的名义来操作他?分组非常有用,比如你要~存的内Ҏ好需要另外一个应用程序的一部分或数?当依赖的发生了改?正好联动的可以很多的组q期,q而与组发生兌的缓存内容得到更?<br /> language : 讄~码方式.<br /> refreshpolicyclass:指定自定义的cL处理~存的内容什么时候过?q个c需要从 refreshpolicyparam com.opensymphony.oscache.web.WebEntryRefreshPolicyl承.<br /> refreshpolicyparam : 它和上面的是联合使用?是给refreshpolicyclass传Q意的参数?指定q项的话,必Lrefreshpolicyclass,否则׃起作?<br /> 属性就q么多了,下面丑և个应用的例子:<br /> <os:cache key="<%=myKey%>" time="1800" refresh="<%=needRefresh%>"><br /> <!--q里是要~存的内?-><br /> </os:cache><br /> q里myKey标识的缓存内容保?0分钟,到期自动h.如果needRefresh为true也会h(适合于更新内容的xh).<br /> <br /> <os:cache key="<%=myKey%>" cron="0 2 * * *" refresh="<%=needRefresh%>"><br />      <!--q里是要~存的内?-><br /> </os:cache><br /> myKey标识的缓存内容在每天的凌?时自动刷?如果needRefresh为true也会h(适合于更新内容的xh).<br /> 丑ֈ了这个例?我不得不把cron表达式多说几?首先q五颗星的位|代?br /> ?时,一个月中的??一周中的天<br /> ? 无疑?~59.<br /> 时 : 无疑?0~23.<br /> ?? : 1~31<br /> ?: 1~12,用英文全UC可以.如January, April<br /> ??: 0~6(0代表Sunday; 1代表Monday… 6代表Saturday)<br /> 举个例子,比如我们惌~存的内容在4月的晚上11:45分过?我们可以q样来写<br /> "45 23 * April *".<br /> <br /> <br /> <usecached /><br /> 需要放在cache标签中嵌套?一般配合try..catch使用)告诉他的上标签是否应用~存的译? 则出现异常时会替换包括上标签在内的所有内?提示:Missing cached content). use="true|false" : 是否应用的标? 默认为True.一般省?<br /> 应用例子:<br /> <os:cache><br />    ..内容..<br />           <% try {%><br />           ......其它内容<br />           <%}catch (Exception e) {%><br />                Inside catch: <os:usecached use="<%=isUsed%>"/> YES<br />           <% } %><br />    </os:cache><br /> 则出现异常时的页面输出有两种:<br /> 1>. isUsed=false<br /> ..内容..<br /> ......其它内容<br /> Inside catch: YES<br /> 2>. isUsed=true<br /> Missing cached content<br /> <br /> <flush /><br /> q个标签是用于在q行时状态下h~存?q个标签非常有用,因ؓ它可以放在WebE序的管理部分ɽ理员可以决定何时刷新缓?<br /> 属性如?<br /> scope : h的范?3个? "application", "session" and null .null表示h所?<br /> Key   : 和scope联合使用,h指定范围的指定缓?如果不指定scope则key无效.<br /> group   : 和scope联合使用, h指定范围的指定组中的~存. 不指定scope无效.<br /> Pattern :M包含了pattren指定的字W串的缓存都被更?它也是和scopeq用.但是现在官方不赞成再用这个属性了.用group完全可以取代q个.便于理.<br /> language : 讄~码方式<br /> 丑և个应用的例子:<br />      h整个application.<br />      <os:flush scope="application" /><br /> <br />      hsession中的foobarq个~存.<br />      <os:flush scope="session" key="foobar" /><br /> <br />      在application 中刷新所有currencyData l中的缓?br />      <os:flush scope="application" group="currencyData" /><br /> <br /> <br /> <addgroup /><br /> q个标签也是必须嵌套在cache标签中的.把缓存的东东攑օ到指定的l中.q样可以以l来h指定的内容了.<br /> 属性只有group来指定名字的.例子如下:<br />      把test1加入到group1和group2?br />      <os:cache key="test1"><br />           < os:addgroup group="group1" /><br />           ... some jsp content ...<br />           < os:addgroup group="group2" /><br />           ... some more jsp content ...<br /> </ os:cache><br /> <br /> <br /> <addgroups /> (2.3及以后的版本中新加的)<br />       同上面的功能相同,只不q可以不用一个一个加group?例子如下:<br />       < os:cache key="test1"><br />           ... some jsp content ...<br />           < os:addgroups groups="group1,group2" /><br />           ... some jsp content ...<br />       </ os:cache><br /> <br /> 2.API的应?br /> 在实际应用中除了JSP标签库和CacheFilter(下面介绍)?q可以用OSCache提供的Java API .下面我来介绍一个实用的Javac?,使用GeneralCacheAdministrator来徏?h和管理缓? GeneralCacheAdministrator可以被实例化,里面有很多的实用Ҏ.此外它还理加蝲cache.propertiesq且Ҏq个属性文件创Z个缓存实?因此你最好用单例模式来创徏GeneralCacheAdministrator实例.<br />       主要用到的GeneralCacheAdministrator的方法有<br /> public Object getFromCache(String key) throws NeedsRefreshException; -- 从缓存中获取一个key标识的对?<br /> public Object getFromCache(String key, int refreshPeriod) throws NeedsRefreshException ; -- 从缓存中获取一个key标识的对?   refreshPeriodh周期,标识此对象在~存中保存的旉(单位:U?<br /> <br /> public void putInCache(String key, Object content)   -- 存储一个由Key标识的缓存对?<br /> <br /> public void putInCache(String key, Object content, String[] groups)    -- 存储一个由Key标识的属于groups中所有成员的~存对象.<br /> <br /> public void flushEntry(String key) -- 更新一个Key标识的缓存对?<br /> public void flushGroup(String group) --更新一l属于groupr标识的所有缓存对?<br /> public void flushAll() -- 更新所有缓?<br /> <br /> public void cancelUpdate(String key) --- 取消更新 只用于在处理捕获的NeedsRefreshException异常q尝试生成新~存内容失效的时?<br /> public void removeEntry(String key) ---从缓中移除一个key标识的对?br /> public void clear()   --- 清除所有缓?br /> <br /> 官方的用例?<br /> ///采取补救措施的典型方?br /> String myKey = "myKey";<br /> String myValue;<br /> int myRefreshPeriod = 1000; //h周期1000U?br /> try {<br />      //从Cache中获?要做cd转换<br />      myValue = (String) admin.getFromCache(myKey, myRefreshPeriod);<br /> } catch (NeedsRefreshException nre) {<br />      try {<br />          // Cache中没有则从库获得数据.<br />          myValue = "This is the content retrieved.";<br />          // 存放在Cache?键值myKey<br />          admin.putInCache(myKey, myValue);<br />      } catch (Exception ex) {<br /> // 试恢复Cache中的内容<br />          myValue = (String) nre.getCacheContent();<br />          // 如果Cache中的内容没有复原 则用q个lҎ<br />          admin.cancelUpdate(myKey);   //取消对myKey的更?即类似数据回?br />      }<br /> }<br /> ///不采取补救措施的典型Ҏ<br /> String myKey = "myKey";<br /> String myValue;<br /> int myRefreshPeriod = 1000;<br /> try {<br />      //从Cache中获?要做cd转换<br />      myValue = (String) admin.getFromCache(myKey, myRefreshPeriod);<br /> } catch (NeedsRefreshException nre) {<br />      try {<br />          // Cache中没有则从库获得数据.<br />          myValue = "This is the content retrieved.";<br />          // 存放在Cache?键值myKey<br />          admin.putInCache(myKey, myValue);<br />          updated = true;<br />      } finally {<br />          if (!updated) {<br />              // 如果Cache中的内容更新出现异常 则用q个lҎ<br />          admin.cancelUpdate(myKey);   //取消对myKey的更?即类似数据回?br />          }<br />      }<br /> }<br /> 注意:<br /> 如果一个NeedsRefreshException出现 必须调用admin.putInCache或甚至admin.cancelUpdate来避免死锁情况发?<br /> <br /> 3.CacheFilter的应?br /> OScache可以是你很轻易的~存|站中全部页?甚至是那些二q制文g.?.4版本开始你可以在运行期讄和覆盖CacheFilter的初始化参数.注意,只有q回状态ؓ200的页面才会缓? (HttpServletResponse.SC_OK).<br /> 配置CacheFilter,在Web.xml中加入如?<br /> <filter><br />      <filter-name>CacheFilter</filter-name><br />      <filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class><br />      <init-param><br />          <param-name>time</param-name><br />          <param-value>600</param-value><br />      </init-param><br />      <init-param><br />          <param-name>scope</param-name><br />          <param-value>session</param-value><br />      </init-param><br /> </filter><br /> <br /> <filter-mapping><br />      <filter-name>CacheFilter</filter-name><br />      <url-pattern>*.jsp</url-pattern><br /> </filter-mapping><br /> q个例子在session范围~存所有JSp10分钟.默认情况scope为application,旉?时.<br /> 如果ICacheKeyProvider不设|的?q个CacheFilter?URI+QueryString)作ؓ~存Key.<br /> 你可以用下列的初始化参数来讄CacheFilter:<br /> <br /> Parameter: time<br /> 讄~存旉,默认?个小?可以讄?1(不确?.q样他就不会q期?除非你明刷新它(前面说到的refresh =”true”).或者是更改q个h的策?<br /> <br /> Parameter: scope<br /> 同cache的scope. 也是有application(default)和session<br /> <br /> Parameter: cron (NEW! Since 2.3)<br /> 同cache的scope.讄q期<br /> <br /> Parameter: fragment (NEW! Since 2.2)<br /> 作用不太清除,用默认即?<br /> <br /> Parameter: nocache (NEW! Since 2.2)<br /> 定义那些面不需要缓?”off”---~存所?”sessionIdInURL”---如果session中包括这URL的则不缓存这个页?br /> <br /> Parameter: lastModified (NEW! Since 2.2)<br /> 定义是否把Header发送到Response?<br /> "off"----不发?即便它设|在qo链中.<br /> "on"----如果在过滤链中则发?<br /> "inital"(default)----最后更改的信息基于当前时间被讄<br /> <br /> Parameter: max-age (NEW! Since 2.3.1)<br /> 讄在浏览器中缓存的最大时?在设|的期间,不再向服务器h,而是从自q~存中查N?默认?0U?<br /> <br /> Parameter: expires (NEW! Since 2.2)<br /> 定义q期header发送到Response中的旉.<br /> "off"----不发?<br /> "on"(default)---如果在过滤链中则发?q且timeq个q期信息基于时间参数和面内容的创建时间初始化.<br /> <br /> Parameter: ICacheKeyProvider (NEW! Since 2.2)<br /> 指定实现ICacheKeyProvider接口的类.<br /> <br /> Parameter: ICacheGroupsProvider (NEW! Since 2.2)<br /> 指定实现ICacheGroupsProvider接口的类<br /> <br /> Parameter: EntryRefreshPolicy (New! Since 2.3)<br /> 指定实现EntryRefreshPolicy接口的类.<br /> <br /> Parameter: disableCacheOnMethods (New! Since 2.4)<br /> 指定h方式不进行缓?默认Null,Ҏ有的h方式都缓?例如:<br /> <init-param><br />          <param-name>disableCacheOnMethods</param-name><br />          <param-value>POST,PUT,DELETE</param-value><br />      </init-param><br /> <br /> Parameter: oscache-properties-file (New! Since 2.4)<br /> 通过指定OSCache的属性文?开发者就能运行多个CacheFilter<br /> <br /> 4.OSCache的属性文?(oscache.properties)<br /> cache.memory<br /> gؓtrue或false.默认为true.如果讄为false那么~存到数据库或硬盘中.g有点?所以我们一般不Ҏ?<br /> <br /> cache.capacity<br /> ~存元素的个?默认是没有限制的.<br /> <br /> cache.algorithm<br /> ~存的算?注意要是指定法的话,必须把上面的~存个数指定.q里支持三种法.<br /> com.opensymphony.oscache.base.algorithm.LRUCache – 最后最q?br /> com.opensymphony.oscache.base.algorithm.FIFOCache – 先进先出<br /> com.opensymphony.oscache.base.algorithm.UnlimitedCache – 无限~存<br /> <br /> cache.blocking<br /> 是否同步化。true 或?false。一般设为trueQ避免读取脏数据?br /> <br /> cache.unlimited.disk<br /> 指定盘~存是否要作限制。默认gؓfalse。false的状况下Qdisk cache capacity 和cache.capacity的值相同?br /> <br /> cache.persistence.class<br /> 指定cL被持久化的类。class必须实现PersistenceListener接口。作为硬盘持久,可以实现 com.opensymphony.oscache.plugins.diskpersistence.HashDiskPersistenceListener 接口。它把class的toString()输出的hashg为文件的名称。如果你要把文g名易读(自己讑֮Q,DiskPersistenceListener 的父cM 能用,但其可能有非法字W或者过长的名字。注意:HashDiskPersistenceListener ?DiskPersistenceListener 需要设定硬盘\径:cache.path<br /> <br /> cache.path<br /> 指定盘~存的\径。目录如果不存在被建立。同时注意oscache应该要有权限写文件系l?cache.path=c:""myapp""cache or *ix: cache.path=/opt/myapp/cache<br /> <br /> cache.persistence.overflow.only (NEW! Since 2.1)<br /> 指定是否只有在内存不的情况下才使用盘~存?默认值false。但推荐是true如果内存cache被允许的话。这个属性彻底的改变了cache的行为,使得persisted cache 和memory完全不同?br /> <br /> cache.event.listeners<br /> 用逗号分离的class名列表。每个class必须实现以下接口之一Q或者几?CacheEntryEventListenerQ接收cache add/update/flush and remove事g CacheMapAccessEventListener Q接收cache讉K事g。这个可以让你跟tcache怎么工作?默认是不配置Mclass的。当然你可以使用一下的classQ?com.opensymphony.oscache.plugins.clustersupport.BroadcastingCacheEventListener Q分布式?此处被屏?。可以广播到局域网内的其他cache实例?com.opensymphony.oscache.extra.CacheEntryEventListenerImpl Q一个简单的(此处被屏?。在cache的生命周期中记录count of 所有entry的事件?com.opensymphony.oscache.extra.CacheMapAccessEventListenerImpl Q记录count of cache map eventsQcache hitsQmisses and state hitsQ?<br /> <br /> cache.key<br /> 讄ServletCacheAdministrator使用的Key.在代码中如果需要用到的?可以通过com.opensymphony.oscache.web.ServletCacheAdministrator.DEFAULT_CACHE_KEY得到.<br /> <br /> cache.use.host.domain.in.key<br /> 如果你的服务器是被配|到多台L上的?你或许想加上一个主机的名字在它生成的缓存Key?true的话会加?默认值是false.<br /> <br /> 附加的属? cache.cluster.multicast.ip,   cache.cluster.properties<br /> <br /> 5.结:<br /> OSCache的用主要有4U:<br /> POJO ~存<br /> HTTP Response ~存<br /> JSP Tag Library ~存<br /> O/R Data Access ~存<br /> <br /> 1)、POJO ~存<br /> q种方式的缓存直接调用OSCache的APIq行Q主要用于处理页面内容会Ҏ参数动态改变,可以参数设|ؓkey值来保存数据Q?br /> 首先Q声明成员变量:<br /> // OSCache Adminitrator instance<br /> private static GeneralCacheAdministrator cacheAdmin = null;<br /> 其次Q进行初始化Q?br /> public RingArtistAction() {<br />    cacheAdmin = new GeneralCacheAdministrator();<br /> }<br /> POJOq行~存Q?br />    // Cache data key and refresh period<br />    String key = sex + ":" + place;<br />    int refreshPeriod = Constants.getIntegerValue(Constants.OSCACHE_REFRESH_PERIOD).intValue();<br />    try {<br />        // Get from the cache<br />     artists = (Map) cacheAdmin.getFromCache(key, refreshPeriod);<br />    } catch (NeedsRefreshException nre) {<br />        try {<br />            // Get the value (probably from the database)<br />      int count = getArtistCount(sex, place, errors);<br />      artists = getArtistData(sex, place, count, errors);<br />            // Store in the cache<br />      cacheAdmin.putInCache(key, artists);<br />        } catch (Exception ex) {<br />            // We have the current content if we want fail-over.<br />      artists = (Map) nre.getCacheContent();<br />            // It is essential that cancelUpdate is called if the<br />            // cached content is not rebuilt<br />      cacheAdmin.cancelUpdate(key);<br />      ex.printStackTrace();<br />        }<br />    }<br />   <br /> 2)、HTTP Response ~存<br /> q种方式的缓存用来处理整个页面的内容固定Q不会根据参数动态改变:<br /> 首先在web.xml中配|CacheFilterQ?br /> <filter><br />    <filter-name>CacheFilter</filter-name><br />    <filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class><br />    <init-param><br />     <param-name>time</param-name><br />     <param-value>86400</param-value><br />    </init-param><br />    <init-param><br />     <param-name>scope</param-name><br />     <param-value>application</param-value><br />    </init-param><br /> </filter><br /> 所有需要缓存的面加入filter-mappingQ?br /> <filter-mapping><br />    <filter-name>Set Character Encoding</filter-name><br />    <url-pattern>/*</url-pattern><br /> </filter-mapping><br /> 注意Q只有返回状态ؓ200QHttpServletResponse.SC_OKQ的内容才会被缓?br /> <br /> 3)、JSP Tag ~存<br /> JSP Tag~存主要用于~存JSP面的局部内容:<br />    <cache:cache key="especialcategory" cron="* 5 * * *"><br />    <jsp:include page="/ringcategory.do" flush="true" ><br />      <jsp:param name="ringType" value="1"/><br />    </jsp:include><br />    </cache:cache><br /> <br /> 4)、O/R Data Access ~存<br /> 请阅d考资料的内容获取详情.<br /> <br /> <img src ="http://www.tkk7.com/gen-sky/aggbug/285801.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gen-sky/" target="_blank">星期?/a> 2009-07-07 13:48 <a href="http://www.tkk7.com/gen-sky/articles/285801.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://zbr555sina.com" target="_blank">Ƶһ</a>| <a href="http://wwwkk2347.com" target="_blank">jizzһ</a>| <a href="http://www-8812.com" target="_blank">þþþƷƵ</a>| <a href="http://directzx.com" target="_blank">Ƶһ</a>| <a href="http://sao350.com" target="_blank">wwwѻɫ</a>| <a href="http://69xjk.com" target="_blank">޾Ʒav߹ۿ</a>| <a href="http://xjywater.com" target="_blank">Ƶ </a>| <a href="http://zjdoukai.com" target="_blank">պ߹ۿ</a>| <a href="http://6h6y.com" target="_blank">ŮƷĻ</a>| <a href="http://bbyy7.com" target="_blank">պëƬƵ</a>| <a href="http://508009.com" target="_blank">ڵƵ߹ۿ</a>| <a href="http://fense1.com" target="_blank">ŷƷպһҹҹ</a>| <a href="http://jlzjjy.com" target="_blank">ŮƵaƵȫվɫ</a>| <a href="http://kutuwo.com" target="_blank">A</a>| <a href="http://bjgelinhotel.com" target="_blank">һ˿wwwƵ</a>| <a href="http://22222xxx.com" target="_blank">վWWW߹ۿ</a>| <a href="http://wogool.com" target="_blank">aaŮ˴ƬˮƵ</a>| <a href="http://xsjxp.com" target="_blank">AVۺɫһ</a>| <a href="http://msjdyd.com" target="_blank">ŮպѲ</a>| <a href="http://777cc55.com" target="_blank">޿һ24鶹</a>| <a href="http://gedebai.com" target="_blank">ĻѴƬa</a>| <a href="http://93qsgy.com" target="_blank">רëƬ߳ˮ</a>| <a href="http://linmh.com" target="_blank">޳AƬ777777</a>| <a href="http://555yyyy.com" target="_blank">þþþþùaѹۿɫƬ </a>| <a href="http://bobostrong31.com" target="_blank">ؼƷëƬѹۿ</a>| <a href="http://cih60o.com" target="_blank">޾ƷŮ</a>| <a href="http://gzmsijz.com" target="_blank">AVƬ</a>| <a href="http://ahzlgj.com" target="_blank">WWWƵ߹ۿ</a>| <a href="http://bjsunic.com" target="_blank">Ʒa߹ۿ</a>| <a href="http://6006769.com" target="_blank">Ƶһ </a>| <a href="http://sjzbosite.com" target="_blank">þþѵľƷ</a>| <a href="http://6668889.com" target="_blank">ŷ ͼƬۺ</a>| <a href="http://szicon.com" target="_blank">ֳִִӲƵ</a>| <a href="http://33sse.com" target="_blank">һƵѹۿ</a>| <a href="http://w7768.com" target="_blank">޼Ůۺ99</a>| <a href="http://pengkaimjg.com" target="_blank">޲avĻ</a>| <a href="http://clever-ad.com" target="_blank">þþþþùƷͬ </a>| <a href="http://j2eesp.com" target="_blank">߹ۿ</a>| <a href="http://5s6b.com" target="_blank">þù߳׽ѹۿ</a>| <a href="http://www00475.com" target="_blank">mv</a>| <a href="http://cct68.com" target="_blank">޾Ʒ³ĵӰ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>