/// <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); } } }
/// <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); }
/// <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); }