??xml version="1.0" encoding="utf-8" standalone="yes"?>粉嫩av在线播放,国产99亚洲,国产精品视频一二三区http://www.aygfsteel.com/zhongli/zh-cnFri, 20 Jun 2025 01:23:30 GMTFri, 20 Jun 2025 01:23:30 GMT60在J2EEpȝ中应用OSCache http://www.aygfsteel.com/zhongli/archive/2009/02/22/256033.htmlzhonglizhongliSun, 22 Feb 2009 06:29:00 GMThttp://www.aygfsteel.com/zhongli/archive/2009/02/22/256033.html

文章摘要

Cache是一U用于提高系l响应速度、改善系l运行性能的技术。尤其是在Web应用中,通过~存面的输出结果,可以很显著的改善pȝq行性能。本文中作者给大家介绍一个实现J2EE框架中Web应用层缓存功能的开放源代码目----OSCache。通过应用OSCacheQ我们不但可以实现通常的Cache功能Q还能够改善pȝ的稳定性?/p>

1 面(f)的问?/h4>

1.1 需要处理的Ҏ(gu)动态内?/h4>

在信息系l徏设过E中我们通常?x)遇到这L(fng)问题Q?/p>

1. 基础数据的变更问?/strong>

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

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

2. l计报表Q不仅限于统计报表)(j)的问?/strong>

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

1.2 问题的共同点


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

1、被处理的内容短旉不变Q所以短旉内可以作为静(rn)态内容进行处?/p>

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

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

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

1.3 解决Ҏ(gu)


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

1、缓存(sh)?/p>

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

2、响应信息由~存提供

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

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

2 OSCache?/h4>

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

2.1 主要特征


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

已经通过兼容试的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的?/p>

2. 可选的~存?/p>

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

  • 使用内存?sh)?f)~存区将可以提供更好的性能
  • 使用盘?sh)?f)~存区可以在服务器重起后q速恢复缓存内?
  • 同时使用内存和硬盘(sh)为缓存区则可以减对内存的占?

3. 灉|的缓存系l?/p>

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

4. 定w

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

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

3 OSCachelg的安?/h4>

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

1. 下蝲、解压羃OSCache

请到OSCache的主?a >http://www.opensymphony.com/oscache/download.html http://www.bt285.cn/content.php?id=1196863  http://www.5a520.cn

下蝲Oscache的最新版本,作者下载的是OSCache的最新稳定版?.0?/p>

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

2. 新徏立一个web应用

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

4. commons-logging.jar、commons-collections.jar的处?/p>

  • OSCachelg用Jakarta Commons Logging来处理日志信息,所以需要commons-logging.jar的支持,请将%OSCache_Home%libcorecommons-logging.jar攑օclasspathQ通常意味着这个文件放入WEB-INFlib目录Q?
  • 如果使用JDK1.3,请将%OSCache_Home%libcorecommons-collections.jar攑օclasspathQ如果用JDK1.4或者以上版本,则不需要了(jin)

5. oscache.properties、oscache.tld攑օWEB-INFclass目录

  • %OSCache_Home%oscache.properties包含?jin)对OSCacheq行特征值的讄信息
  • %OSCache_Home%oscache.tld包含?jin)OSCache提供的标{ֺ的定义内?

6. 修改web.xml文g

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

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

4 开始用OSCache中的~存lg


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

4.1 JSP部分内容~存


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

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

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

  • 1. ~存旉过?jin)cache标签讄的time或者duration属性规定的时旉
  • 2. cron属性规定的旉比缓存(sh)息的开始时间更?
  • 3. 标签中缓存的内容在缓存后又被重新hq?
  • 4. 其他~存期讑֮

如果W合上面四项中的M一,被缓存的内容视ؓ(f)已经失效Q这时被~存的内容将被重新处理ƈ且返回处理过后的信息Q如果被~存的内Ҏ(gu)有失效,那么q回l用L(fng)是~存?sh)的信息?/p>

cache标签的属性说?

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

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

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

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

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

refresh - false 或者true?/p>

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

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

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

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

4.1.2 Cache标签实例分析:


1. 最单的cache标签用法

使用默认的关键字来标识cache内容Q超时时间是默认?600U?/p>
<cache:cache>
            <%
            //自己的JSP代码内容
            %>
            </cache:cache>

2. 用自己指定的字符串标识缓存内容,q且讑֮作用范围为session?/p>
<cache:cache key="foobar" scope="session">
            <%
            //自己的JSP代码内容
            %>
            </cache:cache>

3.动态设定key|使用自己指定的time属性设定缓存内容的时旉Q用动态refresh值决定是否强制内容刷新?/p>

因ؓ(f)OSCache使用key值来标识~存内容Q用相同的key值将?x)被认?f)使用相同的的~存内容Q所以用动态的key值可以自qҎ(gu)不同的角艌Ӏ不同的要求军_使用不同的缓存内宏V?/p>
<cache:cache key="<%= product.getId() %>" time="1800" refresh="<%= needRefresh %>">
            <%
            //自己的JSP代码内容
            %>
            </cache:cache>

4. 讄time属性ؓ(f)负数使缓存内Ҏ(gu)不过?/p>
<cache:cache time="-1">
            <%
            //自己的JSP代码内容
            %>

5. 使用duration属性设|超期时?/p>
<cache:cache  duration='PT5M'>
            <%
            //自己的JSP代码内容
            %>

6. 使用mode属性被缓存的内容不加入给客户的响应中

<cache:cache  mode='silent'>
            <%
            //自己的JSP代码内容
            %>

4.2 用CashFilter实现面U缓?/h4>

在OSCachelg中提供了(jin)一个CacheFilter用于实现面U的~存Q主要用于对web应用中的某些动态页面进行缓存,其是那些需要生成pdf格式文g/报表、图片文件等的页面,不仅减少?jin)数据库的交互、减数据库服务器的压力Q而且对于减少web服务器的性能消耗有很显著的效果?/p>

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

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

1. ~存单个文g

修改web.xmlQ增加如下内容,定?testContent.jsp面q行~存?/p>
<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行~存?/p>
<filter>
            <filter-name>CacheFilter</filter-name>
            <filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
            </filter>
            <filter-mapping>
            <filter-name>CacheFilter</filter-name>
            <!-Ҏ(gu)有jsp面内容q行~存-->
            <url-pattern>*.jsp</url-pattern>
            </filter-mapping>

3. 自己讑֮~存属?/p>

在页面~存的情况下Q可以通过讄CacheFilter的初始属性来军_~存的一些特性:(x)time属性设|缓存的旉D,默认?600U,可以Ҏ(gu)自己的需要只有的讄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>
            <!-Ҏ(gu)有jsp面内容q行~存-->
            <url-pattern>*.jsp</url-pattern>
            </filter-mapping>

5 性能试l果


5.1 试环境


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

web服务器:(x)websphere 5.0

数据库服务器Qmysql 4.0.18-nt

性能试用工P(x)apache Jmeter

5.2 试计划


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

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

5.3 试l果


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

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

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

6 ȝ


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

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

作者根据自q使用l验l大家提供了(jin)一些简单的例子Q他们部分演CZ(jin)如何使用OSCachelg提供的丰富特性,OSCache提供的特性远不止q些Q需要大家在今后的时间里深入的研I?/p>

zhongli 2009-02-22 14:29 发表评论
]]>Z么Javaq个语言没有在基应用领域发挥优势Q?/title><link>http://www.aygfsteel.com/zhongli/archive/2009/02/18/255245.html</link><dc:creator>zhongli</dc:creator><author>zhongli</author><pubDate>Wed, 18 Feb 2009 05:12:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhongli/archive/2009/02/18/255245.html</guid><description><![CDATA[<p>在做WEB服务器的时候,׃直在抱怨,我们的WEB服务器怎么是那么慢,TPSL上不厅R一般谈?qing)高性能的网l服务,L不由自主的想到用C语言d发服务应用,以确保性能?/p> <p>NJava语言的性能Q就真的是远q不如C吗?</p> <p>其实Q大安知道QJDK 5.0 6.0的绝Ҏ(gu)能和C相比差距q不大,在很多评里面,两者的差距不到一倍。而从语言Ҏ(gu)上来说QJava语言Q在抽象机制、安全机制、内存管理、ƈ发控制和基础库上Q和C语言相比Q就像火枪和弓箭?/p> <p>但是Q就是这P装备?jin)大量堪U完的高Ҏ(gu)的Java语言Q却在基应用领域内较?yu)应用,明显落后于C语言。尤其在数据库、高性能|络服务、图形图形处理等领域。这其中的根本原因是什么?Q?/p> <p>我想C(jin)一些原因:(x)</p> <p>1、h的问题?/p> <p>能够用C语言写出优秀基础软g的h固然不多Q能用Java写出来的人恐怕更。Java有好几百万开发者,但是他们在干什么?大部分是L企业U开发、Web开发了(jin)Q像q种bt下蝲|站 <a >www.bt285.cn</a> 很简单就可以实现?jin)。但是有多少人真的理解Java的内存模型?有多h能够熟练使用java.util.concurrent包中提供的那些工P很多使用Java多年的h没有写过socketE序Q不?jin)解Java多线E的开销Q不清楚如何q行性能诊断和调优,而这些在写基软g的时候是必备的技能。大部分JavaE序员在刚刚学会(x)Java之后p{向Web开发,把主要精力花费在掌握一个又一个大型的、复杂的、具有厚厚的抽象层和华丽l构的frameworks上,不但对真实计机体系l构不清楚,对于Java虚拟出来的那个计环境也不清楚。因此,要把Java开发者编E{变成能够担负起下一代基软g开发工作的兵Q不但难度很大,而且必须p_的时间?/p> <p>2、风格的问题?/p> <p>q个问题我认为是最严重的。基软g开发崇的是自由、直接、透明、简单、高效,反对J琐华丽的设计,反对架床q屋的层层抽象,反对复杂的结构和不必要的灉|性。而Java开发者多q来形成的设?a >风格</a>与此格格不入Q甚臛_以说是对立的。Java?a >意识</a>形态上是要面向企业应用软g的开发,所以特别强调架构,设计模式Q强调标准,规规矩矩Q强调高姿态,一U华늚宫h(hun)气质。在C中,你需要什么就做什么。而在Java中,你经ؓ(f)?jin)要q某件事Q先new一个对象,然后以这个对象ؓ(f)参数new另一个对象,如此q般重复n遍,得到真正需要的对象Q最后就是ؓ(f)?jin)调用那个对象的一个方法?q套J琐的东西,对于基础软g开发来_(d)既不必要Q也很难?fn)惯。需要说明的是,q不是Java语言的问题,其实Java本n不必如此复杂、如此巴z克。从语言本n来看QJava也可以是d直接的,也可是酣畅淋漓的。只不过十多q来几乎没有L(fng)q,所以大家已l不知道Q该怎么用Java写简z程序?</p> <img src ="http://www.aygfsteel.com/zhongli/aggbug/255245.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhongli/" target="_blank">zhongli</a> 2009-02-18 13:12 <a href="http://www.aygfsteel.com/zhongli/archive/2009/02/18/255245.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用javacM的映获取变量名http://www.aygfsteel.com/zhongli/archive/2009/02/13/254535.htmlzhonglizhongliFri, 13 Feb 2009 04:53:00 GMThttp://www.aygfsteel.com/zhongli/archive/2009/02/13/254535.html
q个是偶在一开发中遇到的一个比较有的问题Q找 ?jin)半天的资料加下偶辛勤的思考,l于扑ֈ的解x(chng)法。用反射~~?
  阅读全文

zhongli 2009-02-13 12:53 发表评论
]]>
վ֩ģ壺 | ɽ| տ| | ʯ| ̨| | ڳ| | ʡ| | | | Ӣɳ| | ұ| Ϫ| | | ϼ| DZɽ| | ƽȪ| | | | | | | | | | Ԫ| | | żҴ| п| ï| Ĵʡ| | |