本篇对asp.net缓存的总结,主要是参考了msdn的文章以及博客园中李天平的博客,用于以后查询。msdn里有详细的说明。如有不对之处,望指正。
asp.net中的缓存分为两类:页输出缓存和应用程序缓存。
页输出缓存 :
顾名思义,页输出缓存就是页面的缓存。
使用页输出缓存的方式有两种:
1. 声明方式:
形式如:
<%@ OutputCache Duration="60" VaryByParam="None"%>
其中参数有
Duration="#ofseconds"过期时间
Location="Any | Client | Downstream | Server | None | ServerAndClient"缓存存放的位置
Shared="True | False"是否可以共享
VaryByControl="controlname"缓存关联的控件
VaryByCustom="browser | customstring"缓存关联的参数(浏览器|自定义)
VaryByHeader="headers"http头
VaryByParam="parametername"缓存关联的url中参数(其实也可以关联控件)
CacheProfile="cache profile name | ''"配置文件中的缓存的设置
NoStore="true | false"
SqlDependency="database/table name pair |CommandNotification"关联数据库
大部分的页输出缓存的功能都是在这些参数中实现的。
2.编程方式:
Response.Cache.SetCacheability(HttpCacheability.Public);
具体的参数都在Cache类中。如需使用,可以自行查看。
几个缓存的说明:
1. VaryByParam。
以url中的参数做为依赖。如果不希望根据任何参数来改变缓存内容,请将值设置为 none 。如果希望通过所有的参数值改变都更新缓存,请将属性设置为星号 (*)。如果希望通过特定参数值改变缓存,则将属性设置为特定值。
2.文件依赖项。
string fileDependencyPath = Server.MapPath("test.txt");
Response.AddFileDependency(fileDependencyPath);
缓存依赖文件的改变。缓存的属性由前面所说的两种方法设定。
3.缓存键依赖项。
Response.AddCacheItemDependency("ProcessIntensiveReport");
4.sql server。
sqlserver与页输出缓存结合使用。当sqlserver中指定的表发生改变时,缓存清除。
1.使用之前,先要开启sqlserver缓存功能。具体步骤,百度。
2.配置文件
<caching>
<sqlCacheDependency enabled = "true" pollTime = "1000" >
<databases>
<add name="Northwind"
connectionStringName="NorthwindConnectionString1"
pollTime = "1000"
/>
</databases>
</sqlCacheDependency>
</caching>
这里的connectionStringName是在配置文件中数据库的配置名。
3.缓存设置
<%@ OutputCache Duration="3600" SqlDependency="Northwind:Employees" VaryByParam="none" %>
Northwind是数据库名。Employees是表名。
这样,当 Employees不变时,就调用页缓存。Employees改变时,则清除缓存。
页输出缓存中除了整页的缓存之外,还有部分缓存。方式有两种:
1.控件缓存。把需要缓存的控件做成自定义控件,然后进行缓存。
2.缓存后替换。与控件缓存刚好相反,页面的其他部分缓存,替换部分页面请求都更新。主要是通过 Substitution 控件实现,仅能用于字符串等的不缓存。有一定的局限性。
应用程序缓存 :
顾名思义,应用程序缓存是应用程序的一部分,生命周期和应用程序一样(符合缓存清除条件,也会清除缓存)。
它是一种键值对的形式展示,添加方式有两种:
1.
Cache["CacheItem1"] = "Cached Item 1";
2.cache类下的intser或者add方法。
具体查看msdn。
删除的方法也很简单:cache类下的remove()。
特别之处一点,intsert和add方法中有一个回调函数,当缓存清除时就调用此函数。
此外,应用程序缓存也可以和sqlserver结合使用,使应用程序缓存依赖于sqlserver。也是通过insert或者add方法实现的。