標籤:abs net ons ring blog isp height null add
寫在前面
針對一些經常訪問而很少改變的資料,使用緩衝,可以提高效能。緩衝是一種用空間換取時間的技術,說的直白點就是,第一次訪問從資料庫中讀取資料,然後將這些資料存在一個地方,比如記憶體,硬碟中,再次訪問的時候,不必再從資料庫中讀取,而是從記憶體或者硬碟中讀取資料,可以提高訪問速度。
緩衝
緩衝是一種利用空間換取時間的技術,通俗點也就是將得到的資料放在記憶體中或者硬碟中,在這段時間內伺服器不去讀取資料庫,或真實的資料來源,而是讀取你存在記憶體中的資料。
作用:緩衝可以有效緩解資料庫的壓力。
一個例子
還是先看一個簡單的例子,然後對緩衝有一個直觀的瞭解。
public partial class CacheIndex : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DateTime dt = DateTime.Now; //如果緩衝中沒有currentTime的值,則設定,否則輸出緩衝中的值 if (Cache["currentTime"] == null) { //將目前時間存入緩衝 Cache["currentTime"] = dt; //輸出值 Response.Write("第一次讀取的時間:"+dt.ToString("yyyy-MM-dd HH:mm:ss")); } else { //否則輸出緩衝中的值 dt = (DateTime)Cache["currentTime"]; //輸出值 Response.Write("從緩衝中讀取的時間:"+dt.ToString("yyyy-MM-dd HH:mm:ss")); } } } }
第一次訪問頁面時,會讀取目前時間,然後將其寫入緩衝,重新整理頁面你會發現,之後讀取的值,來自緩衝中的資料。如果要清空緩衝,可以將其設定為null。
這種設定緩衝的方式,是最直觀也是最簡單的方式。
那麼我們是否可以為其設定到期時間呢?當然是可以的,下面看這樣一個例子:
public partial class CacheIndex : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DateTime dt = DateTime.Now; //如果緩衝中沒有currentTime的值,則設定,否則輸出緩衝中的值 if (Cache["currentTime"] == null) { //將目前時間存入緩衝 /* @第一個參數:緩衝鍵 @第二個參數:緩衝的值 @第三個參數:緩衝依賴項,可以為null,不為其設定依賴項。 @第四個參數:緩衝時間,為30秒 @第五個參數:緩衝到期時間類型,這裡是絕對到期時間,每重新整理一次頁面之後30秒緩衝到期。 */ Cache.Insert("currentTime", dt, null, DateTime.Now.AddSeconds(30), System.Web.Caching.Cache.NoSlidingExpiration); //輸出值 Response.Write("第一次讀取的時間:" + dt.ToString("yyyy-MM-dd HH:mm:ss")); } else { //否則輸出緩衝中的值 dt = (DateTime)Cache["currentTime"]; //輸出值 Response.Write("從緩衝中讀取的時間:" + dt.ToString("yyyy-MM-dd HH:mm:ss")); } } } }
無法同時設定 absoluteExpiration 和 slidingExpiration 參數。如果要讓快取項目在特定時間到期,可將 absoluteExpiration 參數設定為特定時間,並將 slidingExpiration(滑動到期時間) 參數設定為 NoSlidingExpiration。
如果要讓快取項目在最後一次訪問該項後的某段時間之後到期,可將 slidingExpiration 參數設定為到期間隔,並將 absoluteExpiration(絕對到期時間) 參數設定為 NoAbsoluteExpiration。
總結
這裡簡單介紹了緩衝的概念,以及舉了一個緩衝的例子。這裡面需要對緩衝中的兩種到期時間好好體會,絕對到期時間和滑動到期時間。
[Asp.net]緩衝簡介