Asp.net緩存技術(HttpRuntime.Cache)


一.緩存:

  • 5個等級的緩存
    1. 1級是網絡級緩存,緩存在瀏覽器,CDN以及代理服務器中   (舉個例子:每個幫助頁面都進行了緩存,訪問一個頁面的代碼非常簡單)
    2. 2級是由.net框架 HttpRuntime.Cache完成,在每台服務器的內存中。
    3. 3級Redis,分布式內存鍵值存儲,在多個支撐同一個站點的服務器上共享緩存項。
    4. 4級SQL Server Cache,整個數據庫,所有數據都被放到內存中。
    5. 5級SSD。通常只在SQL Server預熱后才生效。

二.下面主要介紹HttpRuntime.Cache緩存

意義:

把數據放到Cache中,在指定的時間內,可以直接從Cache中獲取,避免對數據庫等的壓力。

設置和讀取:

設置: 

     //
        // 摘要:
        //     向 System.Web.Caching.Cache 中插入具有依賴項和到期策略的對象。
        //
        // 參數:
        //   key:
        //     用於引用該對象的緩存鍵。
        //
        //   value:
        //     要插入緩存中的對象。
        //
        //   dependencies:
        //     所插入對象的文件依賴項或緩存鍵依賴項。 當任何依賴項更改時,該對象即無效,並從緩存中移除。 如果沒有依賴項,則此參數包含 null。
        //
        //   absoluteExpiration:
        //     所插入對象將到期並被從緩存中移除的時間。 要避免可能的本地時間問題(例如從標准時間改為夏時制),請使用 System.DateTime.UtcNow
        //     而不是 System.DateTime.Now 作為此參數值。 如果使用絕對到期,則 slidingExpiration 參數必須為 System.Web.Caching.Cache.NoSlidingExpiration。
        //
        //   slidingExpiration:
        //     最后一次訪問所插入對象時與該對象到期時之間的時間間隔。 如果該值等效於 20 分鍾,則對象在最后一次被訪問 20 分鍾之后將到期並被從緩存中移除。
        //     如果使用可調到期,則 absoluteExpiration 參數必須為 System.Web.Caching.Cache.NoAbsoluteExpiration。
        //
        // 異常:
        //   System.ArgumentNullException:
        //     key 或 value 參數為 null。
        //
        //   System.ArgumentOutOfRangeException:
        //     將 slidingExpiration 參數設置為小於 TimeSpan.Zero 或大於一年的等效值。
        //
        //   System.ArgumentException:
        //     為要添加到 Cache 中的項設置 absoluteExpiration 和 slidingExpiration 參數。
        public void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration);

讀取:

     HttpRuntime.Cache[“name”]

三.案例分析:

代碼:

////Cache是全局共享的
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            DataTable dt = (DataTable)HttpRuntime.Cache["persons"]; //首先從緩存中取值!返回的是一個object類型的值
            if (dt == null)  //緩存中沒有值就訪問數據庫讀取值
            {
                DataTable table = SqlHelper.ExecuteQuery("select *from Person");  
                HttpRuntime.Cache.Insert("persons", table, null, DateTime.Now.AddMinutes(1), TimeSpan.Zero);//將查詢到的值在存入緩存中
                context.Response.Write(table.Rows.Count);  //測試用於輸出的
                return;
            }
            context.Response.Write(dt.Rows.Count);
        }

執行過程:

第一次訪問:

第二次訪問:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM