缓存方案和最佳实践朱荣成2010/1/******@1、应用程序构建过程中,为了提高应用程序的性能,缓存处理无疑是一个非常重要的环节。通常,我们将一些频繁被访问的数据,以及一些需要大量处理时间得出来的数据缓存在内存中,从而提高性能。例如,如果程序需要处理一张报表,这张报表的数据是关联的几张数据库表,并通过大量的计算得到的数据。我们知道表关联是比较耗时的,如果关联之后得出的数据再进行聚合排序等操作的话,那速度会更慢。因此,我们把查询的报表数据缓存起来,等下次用户再次请求时直接从内存中读取已经生成好的报表,这样对用户和程序无疑都是一件非常好的事情,用户减少了等待时间,程序减轻了压力。那么,何乐而不为呢,既然能让大家都开心的事情我们就去做吧。为此,提供了两种缓存方案。第一种是页输出缓存,它保存页处理输出,并在用户再次请求该页时,重用所保存的输出,而不是再次处理该页。第二种是应用程序缓存,它允许缓存您生成的数据,比如自定义报表对象,DataSet,DataTable等。为我们提供的缓存方案只能应用在单服务器中,如果我们的应用程序有几台服务器做负载均衡,或者我们做分布式应用,那么,为我们提供的缓存解决方案发挥的作用就不大了,我们需要其他的解决方案,现在比较成熟的缓存框架有Memcached,此框架用于分布式系统中,适用于Java,,PHP,Ruby等语言环境构建的应用程序。那么,下面就一一阐述以上提到的缓存方案。2、页输出缓存在页输出缓存中,为我们提供了两种解决方案,第一种是页面级输出缓存,第二种是片段缓存(用户控件缓存)。两种方案各有各的应用场景,我们来分别阐述。、页面级输出缓存页面级输出缓存是比较简单的缓存形式,它是将响应请求而发送的HTML副本保存在内存中,当再有请求时直接将缓存的HTML输出给用户,直到缓存过期。这样,程序的性能会得到非常大的提升。实现具体的实现就非常简单了,只要页面顶部加一条OutputCache指令就可以了。<%***@OutputCacheDuration="10"VaryByParam="none"%>它支持五个属性(Duration,VaryByParam,Location,VaryByCustom,VaryByHeader),有两个(Duration,VaryByParam)是必须的,我们也就研究这两个属性就可以了,也基本够我们日常使用。Duration:页面应该被缓存的时间,以秒为单位。必须是正整数。VaryByParam:Request中变量的名称,这些变量名应该产生单独的缓存条目。"none"表示没有变动。"*"可用于为每个不同的变量数组创建新的缓存条目。变量之间用";"进行分隔。Location:指定应该对输出进行缓存的位置。如果要指定该参数,则必须是下列选项之一:Any、Client、Downstream、None、Server或ServerAndClient。VaryByHeader:基于指定的标头中的变动改变缓存条目。VaryByCustom:(例如,"Browser")。示例<1>.新建一个web项目,<2>.删除页面的上面的默认HTML代码<3>.把下面的代码COPY到刚新建的那个页面中<%***@OutputCacheDuration="10"VaryByParam="none"%><html><headrunat="server"><title>页面输出缓存示例</title><scripttype="text/C#"runat="server">voidPage_Load(objectsender,EventArgse){="Time:"+();}</script></head><body><strong>页面输出缓存示例</strong><hr/><br/><asp:LabelID="lblTime"runat="server"></asp:Label><br/><hr/><ahref="?categoryid=test1">categoryid(test1)</a><br/><ahref="?categoryid=test2">categoryid(test1)</a></body></html><4>.在浏览器中浏览此页面,您会页面上面的Time会有10秒的缓存,每过10秒,Time会变化一次,这时就是Duration="10"属性在起作用,因为我设置了缓存时间为10秒。好的,我们已经测试了Duration="10"属性。<5>.我们点击下面的categoryid(test1)和categoryid
缓存解决方案和最佳实践 来自淘豆网m.daumloan.com转载请标明出处.