.net 方法內容緩存簡化

調用

        public string GetNodeName(string nodeNum)
        {
            Func<string> func = () =>
            {
                return db.FirstOrDefault<string>("SELECT PNodeName FROM  " + PublicVars.NodeNumTableName + " WHERE PNodeNum=@0 AND AppKey=@1", nodeNum, BaseConfig.AppKey);
            };
            return CacheHelper.Set<string>(MethodBase.GetCurrentMethod(), func);
        }

  

緩存幫助類

/// <summary>
    /// 緩存幫助類
    /// </summary>
    public static class CacheHelper
    {
        /// <summary>
        /// 獲取
        /// </summary>
        /// <param name="name">key</param>
        /// <returns></returns>
        public static object Get(string name)
        {
            return HttpRuntime.Cache.Get(name);
        }

        /// <summary>
        /// 移除
        /// </summary>
        /// <param name="name">key</param>
        public static void Remove(string name)
        {
            if (HttpRuntime.Cache[name] != null)
                HttpRuntime.Cache.Remove(name);
        }

        /// <summary>
        /// 寫入 
        /// </summary>
        /// <param name="name">key</param>
        /// <param name="value">value</param> 
        /// <param name="cacheDependency">依賴項</param>
        /// <param name="timeOut">過期時間(秒)</param>
        public static void Set(string name, object value, CacheDependency cacheDependency = null, int timeOut = 20 * 60)
        {
            if (cacheDependency == null)
            {
                HttpRuntime.Cache.Insert(name, value, null, DateTime.Now.AddSeconds(timeOut), TimeSpan.Zero);
            }
            else
            {
                HttpRuntime.Cache.Insert(name, value, cacheDependency, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(timeOut));
            }
        }

        /// <summary>
        /// 寫入
        /// </summary>
        /// <typeparam name="T">返回類型</typeparam>
        /// <param name="method">緩存方法</param>
        /// <param name="func">數據方法</param>
        /// <param name="timeOut">緩存時間(秒)</param>
        /// <returns>緩存數據</returns>
        public static T Set<T>(MethodBase method, Func<T> func, int timeOut = 20 * 60) where T : class
        {
            ParameterInfo[] parameters = method.GetParameters();
            string cacheKey = $"CH_{method.DeclaringType.Name}_{method.Name}";
            if (parameters.Length > 0)
            {
                cacheKey += "_" + MD5Helper.MD5Encrypt32(SerializeHelper.ToJson(parameters));
            }
            T cacheData = CacheHelper.Get(cacheKey) as T;
            if (cacheData == null)
            {
                cacheData = func();
                CacheHelper.Set(cacheKey, cacheData, null, timeOut);
            }
            return cacheData;
        }
    }

  

其他方法:AOP

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章