示例#1
0
        /// <summary>
        /// 获取指定key缓存数据,如果该缓存不存在,则自动调用数据源委托生成缓存(线程安全,但会造成一定性能开销)
        /// </summary>
        /// <typeparam name="T">缓存数据的类型</typeparam>
        /// <param name="key">缓存key</param>
        /// <param name="cacheTime">缓存时间</param>
        /// <param name="callback">数据源委托</param>
        /// <returns></returns>
        public static T GetWithLock <T>(string key, CacheTimeOption cacheTime, RefreshCacheDataHandler <T> callback) where T : class
        {
            // 不缓存时,直接返回
            if (cacheTime == CacheTimeOption.None)
            {
                return(callback());
            }

            if (Contains(key))
            {
                return(Get <T>(key));
            }
            lock (string.Intern(key))
            {
                if (Contains(key))
                {
                    return(Get <T>(key));
                }
                else
                {
                    T content = callback();
                    Set(key, content, cacheTime);
                    return(content);
                }
            }
        }
示例#2
0
        /// <summary>
        /// 获取指定key缓存数据,如果该缓存不存在,则自动调用数据源委托生成缓存 默认半天12小时
        /// </summary>
        /// <typeparam name="T">缓存数据的类型</typeparam>
        /// <param name="key">缓存key</param>
        /// <param name="callback">数据源委托</param>
        /// <returns></returns>
        public static T Get <T>(string key, RefreshCacheDataHandler <T> callback)
        {
            if (Contains(key))
            {
                return(Get <T>(key));
            }
            T content = callback();

            Set(key, content, CacheTimeOption.HalfDay);
            return(content);
        }
示例#3
0
        /// <summary>
        /// 获取指定key缓存数据,如果该缓存不存在,则自动调用数据源委托生成缓存
        /// </summary>
        /// <typeparam name="T">缓存数据的类型</typeparam>
        /// <param name="key">缓存key</param>
        /// <param name="cacheTime">缓存时间</param>
        /// <param name="callback">数据源委托</param>
        /// <returns></returns>
        public static T Get <T>(string key, CacheTimeOption cacheTime, RefreshCacheDataHandler <T> callback)
        {
            // 不缓存时,直接返回
            if (cacheTime == CacheTimeOption.None)
            {
                return(callback());
            }

            if (Contains(key))
            {
                return(Get <T>(key));
            }
            T content = callback();

            Set(key, content, cacheTime);
            return(content);
        }