ASP.NET緩存全解析5:文件緩存依賴
ASP.NET緩存全解析文章索引
- ASP.NET緩存全解析1:緩存的概述
- ASP.NET緩存全解析2:頁面輸出緩存
- ASP.NET緩存全解析3:頁面局部緩存
- ASP.NET緩存全解析4:應用程序數據緩存
- ASP.NET 緩存全解析5:文件緩存依賴
- ASP.NET 緩存全解析6:數據庫緩存依賴
- ASP.NET 緩存全解析7:第三方分布式緩存解決方案 Memcached和Cacheman
這種策略讓緩存依賴于一個指定的文件,通過改變文件的更新日期來清除緩存。
/// <summary>
/// 獲取當前應用程序指定CacheKey的Cache對象值
/// </summary>
/// <param name="CacheKey">索引鍵值</param>
/// <returns>返回緩存對象</returns>
public static object GetCache(string CacheKey)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
return objCache[CacheKey];
}
/// <summary>
/// 設置以緩存依賴的方式緩存數據
/// </summary>
/// <param name="CacheKey">索引鍵值</param>
/// <param name="objObject">緩存對象</param>
/// <param name="cacheDepen">依賴對象</param>
public static void SetCache(string CacheKey, object objObject, System.Web.Caching.CacheDependency dep)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
objCache.Insert(
CacheKey,
objObject,
dep,
System.Web.Caching.Cache.NoAbsoluteExpiration, //從不過期
System.Web.Caching.Cache.NoSlidingExpiration, //禁用可調過期
System.Web.Caching.CacheItemPriority.Default,
null);
}
protected void Page_Load(object sender, EventArgs e)
{
string CacheKey = "cachetest";
object objModel = GetCache(CacheKey);//從緩存中獲取
if (objModel == null) //緩存里沒有
{
objModel = DateTime.Now;//把當前時間進行緩存
if (objModel != null)
{
//依賴 C:\\test.txt 文件的變化來更新緩存
System.Web.Caching.CacheDependency dep = new System.Web.Caching.CacheDependency("C:\\test.txt");
SetCache(CacheKey, objModel, dep);//寫入緩存
}
}
Label1.Text = objModel.ToString();
}
/// 獲取當前應用程序指定CacheKey的Cache對象值
/// </summary>
/// <param name="CacheKey">索引鍵值</param>
/// <returns>返回緩存對象</returns>
public static object GetCache(string CacheKey)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
return objCache[CacheKey];
}
/// <summary>
/// 設置以緩存依賴的方式緩存數據
/// </summary>
/// <param name="CacheKey">索引鍵值</param>
/// <param name="objObject">緩存對象</param>
/// <param name="cacheDepen">依賴對象</param>
public static void SetCache(string CacheKey, object objObject, System.Web.Caching.CacheDependency dep)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
objCache.Insert(
CacheKey,
objObject,
dep,
System.Web.Caching.Cache.NoAbsoluteExpiration, //從不過期
System.Web.Caching.Cache.NoSlidingExpiration, //禁用可調過期
System.Web.Caching.CacheItemPriority.Default,
null);
}
protected void Page_Load(object sender, EventArgs e)
{
string CacheKey = "cachetest";
object objModel = GetCache(CacheKey);//從緩存中獲取
if (objModel == null) //緩存里沒有
{
objModel = DateTime.Now;//把當前時間進行緩存
if (objModel != null)
{
//依賴 C:\\test.txt 文件的變化來更新緩存
System.Web.Caching.CacheDependency dep = new System.Web.Caching.CacheDependency("C:\\test.txt");
SetCache(CacheKey, objModel, dep);//寫入緩存
}
}
Label1.Text = objModel.ToString();
}
這種方式的缺點是,如果緩存的數據比較多,相關的依賴文件比較松散,對管理這些依賴文件有一定的麻煩。對于負載均衡環境下,還需要同時更新多臺Web服務器下的緩存文件,如果多個Web應用中的緩存依賴于同一個共享的文件,可能會省掉這個麻煩。
全站熱搜