Asp.Net输出缓存、数据缓存应用

代码
  一、页面输出缓存OutPutCache

    要实现页面输出缓存,只要将一条 OutputCache 指令添加到页面即可。
   
<%@ OutputCache Duration="60" VaryByParam="none" Location=ServerAndClient %> //在服务器和客户端都缓存

  二、片段缓存,用户控件输出缓存

    
<%@ OutputCache Duration="60" VaryByParam="Id;PageIndex" %>
    该示例将缓存用户控件 
60 秒,并且将针对查询字符串的每个变动为每个页面创建单独的缓存页面。

    
<%@ OutputCache Duration="60" VaryByParam="none"  VaryByControl="CategoryDropDownList" %>
    该示例将缓存用户控件 
60 秒,并且将针对查询字符串的每个变动、针对此控件所在的每个页面创建单独的缓存条目。
    
   
<%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="browser"  %> 
    VaryByCustom 用于支持浏览器自定义为了使每个浏览器都具有单独的缓存条目,VaryByCustom 的值可以设置为 
"browser"。此功能已经内置在缓存模块中,并   且将针对每个浏览器名称和主要版本插入单独的页面缓存版本。

     
     实现
     片段缓存使用的语法与页面级输出缓存一样,但其应用于用户控件(.ascx 文件)而不是 Web 窗体(.aspx 文件)。除了 Location 属性,对于 OutputCache 在 Web 窗体上支持的所有属性,用户控件也同样支持。用户控件还支持名为 VaryByControl 的 OutputCache 属性,该属性将根据用户控件(通常是页面上的控件,例如,DropDownList)的成员的值改变该控件的缓存。如果指定了 VaryByControl,可以省略 VaryByParam。最后,在默认情况下,对每个页面上的每个用户控件都单独进行缓存。不过,如果一个用户控件不随应用程序中的页面改变,并且在所有页面都使用相同的名称,则可以应用 Shared
="true" 参数,该参数将使用户控件的缓存版本供所有引用该控件的页面使用。

    
<%@ OutputCache Duration="60" VaryByParam="none"  VaryByControl="CategoryDropDownList" %>
    该示例将缓存用户控件 
60 秒,并且将针对 CategoryDropDownList 控件的每个不同的值、针对此控件所在的每个页面创建单独的缓存条目。

    
<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser"  Shared="true %>
    最后,该示例将缓存用户控件 60 秒,并且将针对每个浏览器名称和主要版本创建一个缓存条目。然后,每个浏览器的缓存条目将由引用此用户控件的所有页面共享(只要所有页面都用相同的 ID 引用该控件即可)。
   
   三、数据缓存
   缓存数据引用模式
每当我们尝试访问缓存中的数据时,都应该考虑到一种情况,那就是数据可能已经不在缓存中了。因此,下面的模式应该普遍适用于您对缓存的数据的访问。在这种情况下,我们假定已缓存的数据是一个数据表。
public DataTable GetCustomers(bool BypassCache) 

string cacheKey = "CustomersDataTable"
object cacheItem = Cache[cacheKey] as DataTable; 
if((BypassCache) || (cacheItem == null)) 

cacheItem 
= GetCustomersFromDataSource(); 
Cache.Insert(cacheKey, cacheItem, 
null
DateTime.Now.AddSeconds(GetCacheSecondsFromConfig(cacheKey),  
TimeSpan.Zero); 

return (DataTable)cacheItem; 
}

    ASP.NET清除页面缓存
    (
1)   服务端
            Response.Buffer 
= true;
            Response.ExpiresAbsolute 
= System.DateTime.Now.AddSeconds(-1);
            Response.Expires 
= 0;
            Response.CacheControl 
= "no-cache";
            Response.AddHeader(
"Pragma""No-Cache");


    (
2)   客户端
        
<HEAD>
         
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
         
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
         
<META HTTP-EQUIV="Expires" CONTENT="0">
        
</HEAD>
    
//清除数据缓存
    IDictionaryEnumerator CacheEnum = Cache.GetEnumerator();
    
while (CacheEnum.MoveNext())
    {
      Cache.Remove(CacheEnum.Entry.Key.ToString());
    }
   
//清除页面缓存
   string PagePath = "/Default.aspx";
   HttpResponse.RemoveOutputCacheItem(PagePath);
   PagePath 
= "/TodayRecomend.aspx";
   HttpResponse.RemoveOutputCacheItem(PagePath);
         

 

posted @ 2011-03-15 21:16  Blue Sky ......  阅读(387)  评论(1编辑  收藏  举报