一、什么是缓存技术

缓存是系统或应用程序将频繁使用的数据保存到内存中,当系统或应用程序再次使用时,能够快速地获取数据。缓存技术是提高Web应用程序开发效率最常用的技术。当然在提升效率的同时,缓存技术也有着其自身的不足,如显示的内容可能不是最新、最准确的;缓存增加了系统的复杂性,使其难于测试和调试等等。因此,在开发和测试阶段不建议使用缓存技术。

二、页面输出缓存

页面输出缓存将整个ASP.NET网页保存到服务器内存中。当用户在缓存生命周期内请求该页面时,系统不再编译而是直接输出内存中的相应页面。这一类的缓存表现为不需要经常更新的内容。
使用方法如下。
在相应页面的代码中添加如下内容:<%@ OutputCache Duration="10" VaryByParam="none" %>

几个需要了解的属性

属性名 说明
Duration 设置缓存时间(单位为秒)
Location 设置缓存地点,一般为Any,重要信息建议为Server
Shared 如果对象为用户控件,设置其是否可以由多个页面共享
VaryByControl 用以设置页面中启用缓存的控件名称(页面输出缓存不支持此属性)
VaryByCustom 根据自定义的文本来改变缓存内容
VaryByHeader 根据HTTP头信息来改变缓冲区内容
VaryByParam 该属性定义了一个分号分隔的字符串列表,用于使输出缓存发生变化。如果不需要使缓存内容随任何指定参数发生变化, 则可将该值设为“none”。如果要使输出缓存根据所有参数值发生变化,则将属性设置为“*”

缓存的时间,还可以使用Response.Cache.SetExpiresResponse.Cache.SetMaxAge来进行设定。

三、页面部分缓存

对页面中指定部分进行缓存,对于页面中长时间不变化的静态内容,可以使用用户控件的形式加载进行,同时仅对这个用户控件进行缓存设置。

页面部分缓存的设置有这样几种方法:

  1. 在用户控件中添加@OutputCache指令
    在OutputCache中设置VaryByControl属性,指向缓存控件
  2. 在用户控件中使用PartialCachingAttribute类设置
    在用户控件ascx代码中添加[PartialCaching(10)]设置缓存时间
  3. 使用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)
几种生命周期的设置方式

  1. 文件一旦更改,立即读取最新数据,重新进行缓存
    Cache.Insert(“key”,XMLData,new SystemWeb.Caching.CacheDependency(Server.MapPath(“user.xml”)))
  2. 1分钟以后缓存到期
    Cache.Insert(“key”,XMLData,null,DateTime.Now.AddMinutes(1),TimeSpan.Zero)
  3. 滑动期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   作者:大麦