ASP.NET缓存机制基础概念

开发 后端
ASP.NET中的数据缓存有许多种,一般来说大型的数据使用 Cache对象缓存,用户身份信息用Session对象缓存,小型数据用Cookie对象缓存在客户端。本文介绍ASP.NET缓存机制的一些基础概念。

ASP.NET缓存机制名词解释

页输出缓存:保存页处理输出,下次重用所保存的输出

应用程序缓存:允许缓存所生成的数据,如DataSet

ASP.NET缓存机制概念㈠:页输出缓存

1、页输出缓存的几中形式

①<%@ OutputCache Duration="60" VaryByParam="None" Location="Any"%>

Location指定在哪个地方缓存,Any任何地方都缓存。

60秒以内看到的都是一样的了。

②还可在配置文件里写,然后在页面调用配置文件的缓存名称。

③用编程的方式:

Response.Canche.SetExpires(DateTime.Now.AddSeconds(3));

Response.Canche.SetCacheabiliy(HttpCacheability.Public);

Response.Canche.SetValidUntilExpires(true);

相当于:

Public => Any

Private => Client

NoCache => None

Server => Server

ServerAndPrivate =>ServerAndClient

2、使用文件依赖项缓存页输出

产生背景:有时候,可能需要在文件发生更改时从输出缓存中移除某一项。就是说文件改了以后缓存立即失效。

string filepath = Server.MapPath("TextFile1.txt");

Response.AddFileDependency(filepath);//添加缓存依赖项

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));

Response.Cache.SetCacheability(HttpCacheability.Public);

Response.Cache.SetValidUntiExpires(true);

3、缓存多个版本

①使用请求的浏览器对页的各个版本进行缓存

<%@OutputCache Duration="10" VaryByParam="None" VaryByCustom="browser"%>

②使用参数对页的各个版本进行缓存

<%@OutputCache Duration="60" VaryByParam="City"%>

这个调试可以在url后加QueryString

如:...url?City=shanghai

程序里得到这个上海然后再做其他的操作,这个时候如果参数传的还是shanghai它就不会在走到程序里了。

4、动态更新缓存页的部分,有三种方法可以实现部分不缓存

①已声明方式使用Substitution控件

<asp:Substitution ID="Substitution1" runat="server" MethodName="GetCurrentDateTime" />

public static string GetCurrentDateTime(HttpContext context)

{

return DateTime.Now.ToString();

}

//方法签名必须和委托签名一致

②以编程的方式使用Substitution控件API

Response.WriteSubstitution(new HttpResponseSubstitutionCallback(GetCurrentDateTime))

③以隐式方式使用AdRotator控件

这个控件永远都是不缓存的

ASP.NET缓存机制概念㈡:SQL Server依赖的缓存,非常之有用

当表数据发生改变就清除缓存

1、为SQL Server启用缓存通知

aspnet_regsql.exe -S <Server> -U <Username> -P <Password>

-ed -d Northwind -et -t Employees

Server:服务器

Username:用户名

Password:密码

Northwind:数据库

Employees:表

2、为缓存功能配置网页

<%@OutputCache Duration="3600" SqlDependency="Northind:Employees" VaryByParam="none"%>

3、在Web.config文件中设置缓存配置

<caching>

 <sqlCacheDependency enabled="true" pollTime="1000">

  <database>

   <add name="Northind" connectionStringName="..." pollTime = "1000" />

   </database>

 </sqlCacheDependency>

</caching>

//这里的name要是数据库名称

ASP.NET中的数据缓存有许多种,一般来说大型的数据使用 Cache对象缓存,用户身份信息用Session对象缓存,小型数据用Cookie对象缓存在客户端。

其中 Cache和Session应该属于系统级的缓存,Cookie属于用户客户端的缓存

除此之外还有用户控件的缓存,我转载一篇文章来详细介绍用户控件的缓存

<%@ OutputCache Duration="60" VaryByParam="*" %>

如同其他页面指令一样,该指令应该出现在ASPX页面的顶部,即在任何输出之前。它支持五个属性(或参数),其中两个是必需的。

Duration 必需属性。页面应该被缓存的时间,以秒为单位。必须是正整数。

Location 指定应该对输出进行缓存的位置。如果要指定该参数,则必须是下列选项之:Any、Client、Downstream、None、Server或ServerAndClient。

VaryByParam 必需属性。Request中变量的名称,这些变量名应该产生单独的缓存条目。“none”表示没有变动。“*”可用于为每个不同的变量数组创建新的缓存条目。变量之间用“;”进行分隔。

VaryByHeader 基于指定的标头中的变动改变缓存条目。

VaryByCustom 允许在global.asax中指定自定义变动(例如,“Browser”)。

利用必需的Duration和VaryByParam选项的组合可以处理大多数情况。例如,如果您的产品目录允许用户基于categoryID和页变量查看目录页,您可以用参数值为“categoryID;page”的VaryByParam将产品目录缓存一段时间(如果产品不是随时都在改变,一小时还是可以接受的,因此,持续时间是3600秒)。这将为每个种类的每个目录页创建单独的缓存条目。每个条目从其***个请求算起将维持一个小时。

VaryByHeader 和VaryByCustom主要用于根据访问页面的客户端对页面的外观或内容进行自定义。同一个URL可能需要同时为浏览器和移动电话客户端呈现输出,因此,需要针对不同的客户端缓存不同的内容版本。或者,页面有可能已经针对IE进行了优化,针对Netscape或Opera则应取消这种优化功能。后一个例子非常普遍,我们将提供一个说明如何实现此目标的示例:

示例:VaryByCustom用于支持浏览器自定义

为了使每个浏览器都具有单独的缓存条目,VaryByCustom的值可以设置为“browser”。此功能已经内置在缓存模块中,并且将针对每个浏览器名称和主要版本插入单独的页面缓存版本。<%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="browser"%>

示例:

<%@ OutputCache Duration="60" VaryByParam="*" %>

该示例将缓存用户控件60秒,并且将针对查询字符串的每个变动、针对此控件所在的每个页面创建单独的缓存条目。

<%@ OutputCache Duration="60" VaryByParam="none"

VaryByControl="CategoryDropDownList" %>

该示例将缓存用户控件60秒,并且将针对CategoryDrop

DownList控件的每个不同的值、针对此控件所在的每个页面创建单独的缓存条目。

<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser"

Shared="true" %>

***,该示例将缓存用户控件60秒,并且将针对每个浏览器名称和主要版本创建一个缓存条目。然后,每个浏览器的缓存条目将由引用此用户控件的所有页面共享(只要所有页面都用相同的ID引用该控件即可)。

下面的示例说明了如何设置页或用户控件进行输出缓存的持续时间。

<%@ OutputCache Duration="100" VaryByParam="none" %>

以上就介绍了一些ASP.NET缓存机制的基本概念。

【编辑推荐】

  1. 再谈ASP.NET缓存机制:开发效率与优化的平衡
  2. .NET分布式缓存之Memcached执行速度检测
  3. 如何避免ASP.NET缓存占用系统资源
  4. .NET缓存机制探讨与比对
  5. 概述ASP.NET缓存机制
责任编辑:yangsai 来源: 网络转载
相关推荐

2009-08-04 15:22:33

ASP.NET缓存机制

2009-08-03 18:35:51

ASP.NET数据缓存

2009-07-31 09:32:04

ASP.NET缓存概念ASP.NET缓存应用

2009-07-31 10:23:44

缓存页面ASP.NET缓存

2009-08-04 12:29:57

ViewState概念ASP.NET

2009-07-29 10:35:51

ASP.NET缓存

2009-07-31 10:33:54

ASP.NET页面输出

2009-07-29 14:35:34

页面输出缓存ASP.NET

2009-08-10 18:31:42

什么是ASP.NET

2009-07-29 16:41:45

ASP.NET页面框架

2009-08-17 16:48:34

ASP.NET缓存机制

2009-05-11 13:48:00

ASP.NET 2.0缓存效率

2009-08-03 18:47:12

ASP.NET数据缓存

2009-07-29 15:34:13

2009-07-29 10:56:54

ASP.NET构架与安

2009-08-10 18:46:07

ASP.NET基础语法

2009-07-29 15:38:01

2011-10-19 09:41:15

ASP.NET性能优化

2009-11-09 08:53:21

ASP.NET缓存

2009-07-31 09:57:47

ASP.NET数据库缓
点赞
收藏

51CTO技术栈公众号