C#数据缓存
1 引入缓存帮助类

public class CacheHelp
    {

        /// <summary>
        /// 缓存指定对象,设置缓存
        /// </summary>
        /// <param name="key">缓存的key</param>
        /// <param name="value">缓存的值</param>
        /// <param name="Seconds">设置缓存时间;单位:秒</param>
        /// <returns></returns>
        public static bool Set(string key, object value,double Seconds)
        {
            return Set(key, value, null, DateTime.Now.AddSeconds(Seconds), Cache.NoSlidingExpiration,
            CacheItemPriority.Default, null);
        }

        /// <summary>
        /// 缓存指定对象,设置缓存
        /// </summary>
        public static bool Set(string key, object value, string path)
        {
            try
            {
                var cacheDependency = new CacheDependency(path);
                return Set(key, value, cacheDependency);
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// 缓存指定对象,设置缓存
        /// </summary>
        public static bool Set(string key, object value, CacheDependency cacheDependency)
        {
            return Set(key, value, cacheDependency, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration,
            CacheItemPriority.Default, null);
        }

        /// <summary>
        /// 缓存指定对象,设置缓存
        /// </summary>
        public static bool Set(string key, object value, double seconds, bool isAbsulute)
        {
            return Set(key, value, null, (isAbsulute ? DateTime.Now.AddSeconds(seconds) : Cache.NoAbsoluteExpiration),
            (isAbsulute ? Cache.NoSlidingExpiration : TimeSpan.FromSeconds(seconds)), CacheItemPriority.Default,
            null);
        }

        /// <summary>
        /// 获取缓存对象
        /// </summary>
        public static object Get(string key)
        {
            return GetPrivate(key);
        }

        /// <summary>
        /// 判断缓存中是否含有缓存该键
        /// </summary>
        public static bool Exists(string key)
        {
            return (GetPrivate(key) != null);
        }

        /// <summary>
        /// 移除缓存对象
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static bool Remove(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                return false;
            }
            HttpRuntime.Cache.Remove(key);
            return true;
        }

        /// <summary>
        /// 移除所有缓存
        /// </summary>
        /// <returns></returns>
        public static bool RemoveAll()
        {
            IDictionaryEnumerator iDictionaryEnumerator = HttpRuntime.Cache.GetEnumerator();
            while (iDictionaryEnumerator.MoveNext())
            {
                HttpRuntime.Cache.Remove(Convert.ToString(iDictionaryEnumerator.Key));
            }
            return true;
        }


        /// <summary>
        /// 尝试获取缓存,不存在则执行匿名委托
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <param name="func"></param>
        /// <param name="Seconds">设置缓存时间;单位:秒</param>
        /// <returns></returns>
        public static T TryGet<T>(string key, Func<T> func, double Seconds)
        {
            if (Exists(key)) return (T)Get(key);
            var result = func.Invoke();
            Set(key, result, Seconds);
            return result;
        }


        /// <summary>
        /// 设置缓存
        /// </summary>
        public static bool Set(string key, object value, CacheDependency cacheDependency, DateTime dateTime,
        TimeSpan timeSpan, CacheItemPriority cacheItemPriority, CacheItemRemovedCallback cacheItemRemovedCallback)
        {
            if (string.IsNullOrEmpty(key) || value == null)
            {
                return false;
            }
            HttpRuntime.Cache.Insert(key, value, cacheDependency, dateTime, timeSpan, cacheItemPriority,
            cacheItemRemovedCallback);
            return true;
        }

        /// <summary>
        /// 获取缓存
        /// </summary>
        private static object GetPrivate(string key)
        {
            return string.IsNullOrEmpty(key) ? null : HttpRuntime.Cache.Get(key);
        }
    }

2 缓存方法

 /// <summary>
        /// 数据缓存处理方法
        /// </summary>
        /// <param name="key">缓存名称</param>
         /// <param name="bool">out 参数判断缓存是否存在</param>
         /// <param name="list">要缓存的数据 list<T>类型(也可以设置其他类型)</param>
        /// <returns></returns>
        public static List<T> Cache<T>(string key, out bool b,List<T> list = null)
        {
            List<T> listnew =null;
            string CacheKeyUserList = key;
            b = false;
            if (!CacheHelp.Exists(CacheKeyUserList))
            {
                #region 增加缓存

                //造数据(可以直接数据库访问获得数据)
                bool SetCacheStatus = CacheHelp.Set(
                     key: CacheKeyUserList,
                     value: list,
                     Seconds: 300 //缓存时长,单位“秒”
                     );
                if (SetCacheStatus)
                {
                  string str=  "增加缓存成功";
                }
                else
                {
                    string str = "增加缓存失败";
                }
                #endregion
            }
            else
            {
                #region 获取缓存
                listnew =(List<T>)CacheHelp.Get(CacheKeyUserList);
                #endregion
                b = true;
            }
            return listnew;
        }

3 程序中调用

 List<ResArchiveModel> list2 = Cache<ResArchiveModel>(key, out b);
                    //缓存中存在
                    if (b)
                    {
                        result.code = "10000";
                        result.msg = "推荐资讯数据获取成功";
                        result.data = list2.OrderByDescending(s => s.Random).ToList();
                        return SQLBase.toJson(result);
                    }
                    else{
                        //执行逻辑
                        }		

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐