c# CacheHelper緩存幫助類


一、開篇

  主要功能:改善程序性能。服務器的響應速度,尤其是當數據的處理過程變得復雜以及訪問量變大時,變得比較明顯。有些數據並非時刻在發生變化,如果我們可以將一些變化不頻繁的數據的最終計算結果(包括頁面輸出)緩存起來, 就可以非常明顯地提升程序的性能,緩存的最常見且最重要的用途就體現在這個方面。

二、Cache特點

  Cache類有一個很難得的優點,用MSDN上的說話就是:此類型是線程安全的。

所以,這就意味着我們可以在任何地方讀寫Cache都不用擔心Cache的數據在多線程環境下的數據同步問題。 多線程編程中,最復雜的問題就是數據的同步問題,而Cache已經為我們解決了這些問題。ASP.NET本身就是一個多線程的編程模型,所有的請求是由線程池的線程來處理的。 通常,我們在多線程環境中為了解決數據同步問題,一般是采用鎖來保證數據同步, 自然地,ASP.NET也不例外,它為了解決數據的同步問題,內部也是采用了鎖。

  ASP.NET支持二種緩存項的過期策略:絕對過期和滑動過期。

  1. 絕對過期,這個容易理解:就是在緩存放入Cache時,指定一個具體的時間。當時間到達指定的時間的時,緩存項自動從Cache中移除。
  2. 滑動過期:某些緩存項,我們可能只希望在有用戶在訪問時,就盡量保留在緩存中,只有當一段時間內用戶不再訪問該緩存項時,才移除它, 這樣可以優化內存的使用,因為這種策略可以保證緩存的內容都是【很熱門】的。 操作系統的內存以及磁盤的緩存不都是這樣設計的嗎?而這一非常有用的特性,Cache也為我們准備好了,只要在將緩存項放入緩存時, 指定一個滑動過期時間就可以實現了。

三、幫助類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Caching;

namespace WebApplication6.Comment
{
    public class CacheHelper
    {
        /// <summary>
        /// 讀取緩存數據
        /// </summary>
        /// <param name="cacheKey">鍵</param>
        /// <returns></returns>
        public static object GetCache(string cacheKey)
        {
            var objCache = HttpRuntime.Cache.Get(cacheKey);
            return objCache;
        }

        /// <summary>
        /// 設置緩存數據
        /// </summary>
        /// <param name="cacheKey">鍵</param>
        /// <param name="content">值</param>
        public static void SetCache(string cacheKey, object content)
        {
            var objCache = HttpRuntime.Cache;
            objCache.Insert(cacheKey, content);
        }

        /// <summary>
        /// 設置緩存數據並且設置默認過期時間
        /// </summary>
        /// <param name="cacheKey"></param>
        /// <param name="content"></param>
        /// <param name="timeOut"></param>
        public static void SetCache(string cacheKey, object content, int timeOut = 3600)
        {
            try
            {
                if (content == null)
                {
                    return;
                }
                var objCache = HttpRuntime.Cache;
                //設置絕對過期時間
                //絕對時間過期。DateTime.Now.AddSeconds(10)表示緩存在3600秒后過期,TimeSpan.Zero表示不使用平滑過期策略。
                objCache.Insert(cacheKey, content, null, DateTime.Now.AddSeconds(timeOut), TimeSpan.Zero, CacheItemPriority.High, null);
                //相對過期 
                //DateTime.MaxValue表示不使用絕對時間過期策略,TimeSpan.FromSeconds(10)表示緩存連續10秒沒有訪問就過期。
                //objCache.Insert(cacheKey, objObject, null, DateTime.MaxValue, timeout, CacheItemPriority.NotRemovable, null);  
            }
            catch (Exception)
            {

                throw;
            }
        }

        /// <summary>
        /// 移除指定緩存
        /// </summary>
        /// <param name="cacheKey">鍵</param>
        public static void RemoveAllCache(string cacheKey)
        {
            var objCache = HttpRuntime.Cache;
            objCache.Remove(cacheKey);
        }

        /// <summary>
        /// 刪除全部緩存
        /// </summary>
        public static void RemoveAllCache()
        {
            var objCache = HttpRuntime.Cache;
            var cacheEnum = objCache.GetEnumerator();
            while (cacheEnum.MoveNext())
            {
                objCache.Remove(cacheEnum.Key.ToString());
            }
        }

    }
}

借鑒:http://www.cnblogs.com/fish-li/archive/2011/12/27/2304063.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM