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);
         

 

你可能感兴趣的:(asp.net)