缓存方案和最佳实践
朱荣成
2010/1/20
Zrc000@
1、概述
应用程序构建过程中,为了提高应用程序的性能,缓存处理无疑是一个非常重要的环节。通常,我们将一些频繁被访问的数据,以及一些需要大量处理时间得出来的数据缓存在内存中,从而提高性能。例如,如果程序需要处理一张报表,这张报表的数据是关联的几张数据库表,并通过大量的计算得到的数据。我们知道表关联是比较耗时的,如果关联之后得出的数据再进行聚合排序等操作的话,那速度会更慢。因此,我们把查询的报表数据缓存起来,等下次用户再次请求时直接从内存中读取已经生成好的报表,这样对用户和程序无疑都是一件非常好的事情,用户减少了等待时间,程序减轻了压力。
那么,何乐而不为呢,既然能让大家都开心的事情我们就去做吧。为此,提供了两种缓存方案。第一种是页输出缓存,它保存页处理输出,并在用户再次请求该页时,重用所保存的输出,而不是再次处理该页。第二种是应用程序缓存,它允许缓存您生成的数据,比如自定义报表对象,DataSet,DataTable等。为我们提供的缓存方案只能应用在单服务器中,如果我们的应用程序有几台服务器做负载均衡,或者我们做分布式应用,那么,为我们提供的缓存解决方案发挥的作用就不大了,我们需要其他的解决方案,现在比较成熟的缓存框架有Memcached,此框架用于分布式系统中,适用于Java,,PHP,Ruby等语言环境构建的应用程序。
那么,下面就一一阐述以上提到的缓存方案。
2、页输出缓存
在页输出缓存中,为我们提供了两种解决方案,第一种是页面级输出缓存,第二种是片段缓存(用户控件缓存)。两种方案各有各的应用场景,我们来分别阐述。
、页面级输出缓存
页面级输出缓存是比较简单的缓存形式,它是将响应请求而发送的HTML副本保存在内存中,当再有请求时直接将缓存的HTML输出给用户,直到缓存过期。这样,程序的性能会得到非常大的提升。
实现
具体的实现就非常简单了,只要页面顶部加一条OutputCache指令就可以了。
<%@ OutputCache Duration="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>.在Visual Studio .NET新建一个web项目,
<2>.删除页面的上面的默认HTML代码
<3>.把下面的代码COPY到刚新建的那个页面中
<%@ OutputCache Duration="10" VaryByParam="none"%>
<html>
<head runat="server">
<title>页面输出缓存示例</title>
<script type="text/C#" runat="server">
void Page_Load(object sender, EventArgs e)
{
= "Time:" + ();
}
</script>
</head>
<body>
<strong>页面输出缓存示例</strong>
<hr />
<br />
<asp:Label ID="lblTime" runat="server"></asp:Label>
<br />
<hr />
<a href="?categoryid=test1">categoryid(test1)</a>
<br />
<a href="?categoryid=test2">categoryid(test1)</a>
缓存解决方案和最佳实践 来自淘豆网m.daumloan.com转载请标明出处.