在 ASP.NET 應用程式開發中,合理運用伺服器快取能顯著提升系統效能。本文提供一個功能完整、可直接投入生產環境的 CacheHandler 類別,支援資料的寫入、讀取與移除操作,並針對跨 Session 存取特性進行了優化設計。
using System;
using System.Collections.Generic;
using System.Web.Caching;
using System.Web;
/// <summary>
/// ASP.NET 伺服器快取讀寫操作類別
/// 為了簡化操作,預設將物件寫入快取且不設定過期時間
/// 請使用 Remove() 方法以程式化方式移除伺服器快取物件
/// 本類別作為儲存大型物件於 Session 的替代方案而建立
/// </summary>
public class CacheHandler
{
/// <summary>
/// 將資料寫入快取
/// </summary>
/// <param name="cacheID">快取唯一識別碼</param>
/// <param name="data">要儲存的物件資料</param>
/// <returns>寫入是否成功</returns>
public static bool Write(string cacheID, object data)
{
if (HttpContext.Current == null) return false;
if (string.IsNullOrEmpty(cacheID)) return false;
HttpRuntime.Cache.Insert(
cacheID,
data,
null,
Cache.NoAbsoluteExpiration,
Cache.NoSlidingExpiration,
CacheItemPriority.NotRemovable,
null
);
return true;
}
/// <summary>
/// 從快取讀取資料
/// </summary>
/// <param name="cacheID">快取識別碼</param>
/// <returns>快取物件,不存在則回傳 null</returns>
public static object Read(string cacheID)
{
if (HttpContext.Current == null) return null;
return HttpRuntime.Cache.Get(cacheID);
}
/// <summary>
/// 移除快取資料
/// </summary>
/// <param name="cacheID">要移除的快取識別碼</param>
public static void Remove(string cacheID)
{
if (HttpContext.Current == null) return;
if (string.IsNullOrEmpty(cacheID)) return;
HttpRuntime.Cache.Remove(cacheID);
}
}
實際應用中,建議將唯一的 cacheID 儲存在使用者 Session 中,再透過該識別碼存取快取資料。例如:
// 寫入快取時使用 Session 儲存的唯一識別碼 CacheHandler.Write(Session["MyCacheData"].ToString(), myData); // 讀取時同樣透過 Session 識別碼 var cachedData = CacheHandler.Read(Session["MyCacheData"].ToString());
這種模式既保證了資料隔離性,又充分發揮了伺服器快取跨 Session 共享的優勢,是處理大型共享資料的理想選擇。