zoukankan      html  css  js  c++  java
  • 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);
             
  • 相关阅读:
    [Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
    [Swift]LeetCode921.使括号有效的最少添加 | Minimum Add to Make Parentheses Valid
    [Swift实际操作]八、实用进阶-(5)通过间接代理进行对象间的消息传递
    [Swift]LeetCode927. 三等分 | Three Equal Parts
    [Swift]LeetCode928. 尽量减少恶意软件的传播 II | Minimize Malware Spread II
    我是大牛,我自豪
    程序员拓展人脉的重要性
    程序员拓展人脉的重要性
    2013年总结(3)-活动篇
    2013年总结(3)-活动篇
  • 原文地址:https://www.cnblogs.com/hubcarl/p/1706312.html
Copyright © 2011-2022 走看看