系統快取全解析4:應用程式資料快取

iDotNetSpace發表於2009-07-02

System.Web.Caching 名稱空間提供用於快取伺服器上常用資料的類。此名稱空間包括 Cache 類,該類是一個字典,您可以在其中儲存任意資料物件,如雜湊表和資料集。它還為這些物件提供了失效功能,併為您提供了新增和移除這些物件的方法。您還可以新增依賴於其他檔案或快取項的物件,並在從 Cache 物件中移除物件時執行回撥以通知應用程式。

 

/// 

/// 獲取當前應用程式指定CacheKeyCache物件值

/// 

/// 索引鍵值

/// 返回快取物件

public static object GetCache(string CacheKey)

{

    System.Web.Caching.Cache objCache = HttpRuntime.Cache;

    return objCache[CacheKey];

}

/// 

/// 設定當前應用程式指定CacheKeyCache物件值

/// 

/// 索引鍵值

/// 快取物件

public static void SetCache(string CacheKey, object objObject)

{

    System.Web.Caching.Cache objCache = HttpRuntime.Cache;

    objCache.Insert(CacheKey, objObject);

}

/// 

/// 設定當前應用程式指定CacheKeyCache物件值

/// 

/// 索引鍵值

/// 快取物件

/// 絕對過期時間

/// 最後一次訪問所插入物件時與該物件過期時之間的時間間隔

public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration,TimeSpan slidingExpiration)

{

    System.Web.Caching.Cache objCache = HttpRuntime.Cache;

    objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration);

}       

protected void Page_Load(object sender, EventArgs e)

{

    string CacheKey = "cachetest";

    object objModel = GetCache(CacheKey);//從快取中獲取

    if (objModel == null)//快取裡沒有

    {

        objModel = DateTime.Now;//把當前時間進行快取

        if (objModel != null)

        {

            int CacheTime = 30;//快取時間30

            SetCache(CacheKey, objModel, DateTime.Now.AddSeconds(CacheTime),TimeSpan.Zero);//寫入快取

        }

    }

    Label1.Text = objModel.ToString();

}

 

    以上幾種方法都很好的解決了資料快取的問題,但由一個最大的問題是當資料發生變化了,而快取裡還是過期的資料,只有等快取過期後才會重新獲取最新的資料,這樣的話,很多時候使用者獲取的資料都是和實際資料不一致的過期資料。這同樣給使用者造成了比較大的麻煩,怎麼辦呢?接著往下看。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-608133/,如需轉載,請註明出處,否則將追究法律責任。

相關文章