C# CacheHepler Class

2979 ワード

internal class CacheHelper

    {

        /// <summary>

        /// Insert value into the cache using

        /// appropriate name/value pairs

        /// </summary>

        /// <typeparam name="T">Type of cached item</typeparam>

        /// <param name="o">Item to be cached</param>

        /// <param name="key">Name of item</param>

        public static void Add<T>(T o, string key)

        {

            // NOTE: Apply expiration parameters as you see fit.

            // In this example, I want an absolute 

            // timeout so changes will always be reflected 

            // at that time. Hence, the NoSlidingExpiration.  

            HttpContext.Current.Cache.Insert(

                key,

                o,

                null,

                DateTime.Now.AddMinutes(1440),

                System.Web.Caching.Cache.NoSlidingExpiration);

        }



        /// <summary>

        /// Remove item from cache

        /// </summary>

        /// <param name="key">Name of cached item</param>

        public static void Clear(string key)

        {

            HttpContext.Current.Cache.Remove(key);

        }



        /// <summary>

        /// Check for item in cache

        /// </summary>

        /// <param name="key">Name of cached item</param>

        /// <returns></returns>

        public static bool Exists(string key)

        {

            return HttpContext.Current.Cache[key] != null;

        }



        /// <summary>

        /// Retrieve cached item

        /// </summary>

        /// <typeparam name="T">Type of cached item</typeparam>

        /// <param name="key">Name of cached item</param>

        /// <param name="value">Cached value. Default(T) if 

        /// item doesn't exist.</param>

        /// <returns>Cached item as type</returns>

        public static bool Get<T>(string key, out T value)

        {

            try

            {

                if (!Exists(key))

                {

                    value = default(T);

                    return false;

                } 

                value = (T) HttpContext.Current.Cache[key];

            }

            catch

            {

                value = default(T);

                return false;

            }

            return true;

        }


使用方法:
public override List<Employee> GetEmployeeList()

{

    string key = ConfigurationHelper.CacheKeyEmployeeList;



    List<Employee> employees = CacheHelper.Get<List<Employee>>(key);



    if (employees == null)

    {

        employees = instance.GetEmployeeList();

        CacheHelper.Add(employees, key);

    }



    return employees;

}