一、什么是缓存技术
缓存是系统或应用程序将频繁使用的数据保存到内存中,当系统或应用程序再次使用时,能够快速地获取数据。缓存技术是提高Web应用程序开发效率最常用的技术。当然在提升效率的同时,缓存技术也有着其自身的不足,如显示的内容可能不是最新、最准确的;缓存增加了系统的复杂性,使其难于测试和调试等等。因此,在开发和测试阶段不建议使用缓存技术。
二、页面输出缓存
页面输出缓存将整个ASP.NET网页保存到服务器内存中。当用户在缓存生命周期内请求该页面时,系统不再编译而是直接输出内存中的相应页面。这一类的缓存表现为不需要经常更新的内容。
使用方法如下。
在相应页面的代码中添加如下内容:<%@ OutputCache Duration="10" VaryByParam="none" %>
几个需要了解的属性
属性名 | 说明 |
---|---|
Duration | 设置缓存时间(单位为秒) |
Location | 设置缓存地点,一般为Any,重要信息建议为Server |
Shared | 如果对象为用户控件,设置其是否可以由多个页面共享 |
VaryByControl | 用以设置页面中启用缓存的控件名称(页面输出缓存不支持此属性) |
VaryByCustom | 根据自定义的文本来改变缓存内容 |
VaryByHeader | 根据HTTP头信息来改变缓冲区内容 |
VaryByParam | 该属性定义了一个分号分隔的字符串列表,用于使输出缓存发生变化。如果不需要使缓存内容随任何指定参数发生变化, 则可将该值设为“none”。如果要使输出缓存根据所有参数值发生变化,则将属性设置为“*” |
缓存的时间,还可以使用Response.Cache.SetExpires和Response.Cache.SetMaxAge来进行设定。
三、页面部分缓存
对页面中指定部分进行缓存,对于页面中长时间不变化的静态内容,可以使用用户控件的形式加载进行,同时仅对这个用户控件进行缓存设置。
页面部分缓存的设置有这样几种方法:
- 在用户控件中添加@OutputCache指令
在OutputCache中设置VaryByControl属性,指向缓存控件 - 在用户控件中使用PartialCachingAttribute类设置
在用户控件ascx代码中添加[PartialCaching(10)]设置缓存时间 - 使用ControlCachePolicy类控制用户控件的输出缓存
实例:
protected void Page_Init()
{
PartialCachingControl pcc = LoadControl("WebUserControl.ascx") as PartialCachingControl;
if (pcc.CachePolicy.Duration > TimeSpan.FromSeconds(60))
{
pcc.CachePolicy.SetExpires(DateTime.Now.Add(TimeSpan.FromSeconds(10)));
pcc.CachePolicy.SetSlidingExpiration(false);
}
Controls.Add(pcc);
}
四、页面数据缓存
页面数据缓存即应用程序数据缓存,可通过键值将任意数据存储在内存中。这种数据缓存技术类似于Session的缓存机制,可以在内存中存储各种与应用程序相关的对象。其特点是,数据缓存只能在应用程序内共享,不能在应用程序间共享。
缓存赋值的方法:Cache[“key”]=value
缓存插入值的方法:Cache.Insert(“key”,object)
几种生命周期的设置方式
- 文件一旦更改,立即读取最新数据,重新进行缓存
Cache.Insert(“key”,XMLData,new SystemWeb.Caching.CacheDependency(Server.MapPath(“user.xml”)))
- 1分钟以后缓存到期
Cache.Insert(“key”,XMLData,null,DateTime.Now.AddMinutes(1),TimeSpan.Zero)
- 滑动期1分钟
Cache.Insert(“key”,XMLDatanull,System.Web.Caching.Cache.NoAbsoluteExpiration,TimeSpan.FromMinutes(1))
知识拓展:XML简单入门
课本案例补充
protected void DisplayCacheInfo()
{
string cacheCount = Cache.Count.ToString();
this.Label1.Text = "共包括"+cacheCount+"个缓存对象:";
IDictionaryEnumerator cacheEnum = Cache.GetEnumerator();
while (cacheEnum.MoveNext())
{
this.Label1.Text+= cacheEnum.Key.ToString() + ",";
}
}
文档更新时间: 2018-12-05 19:42 作者:大麦