一.緩存:
- 5個等級的緩存
- 1級是網絡級緩存,緩存在瀏覽器,CDN以及代理服務器中 (舉個例子:每個幫助頁面都進行了緩存,訪問一個頁面的代碼非常簡單)
- 2級是由.net框架 HttpRuntime.Cache完成,在每台服務器的內存中。
- 3級Redis,分布式內存鍵值存儲,在多個支撐同一個站點的服務器上共享緩存項。
- 4級SQL Server Cache,整個數據庫,所有數據都被放到內存中。
- 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); }
執行過程:
第一次訪問:
第二次訪問: