46 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
using langguanApi.Common.Redis;
 | 
						||
using langguanApi.Extensions.AutoDI;
 | 
						||
using Newtonsoft.Json;
 | 
						||
using StackExchange.Redis;
 | 
						||
 | 
						||
namespace langguanApi.Common
 | 
						||
{
 | 
						||
    /// <summary>
 | 
						||
    /// 缓存管理
 | 
						||
    /// </summary>
 | 
						||
    [ServiceInjection(InjectionType.Singleton)]
 | 
						||
    public class CacheManager
 | 
						||
    {
 | 
						||
        private readonly IDatabase _redisDatabase;
 | 
						||
        /// <summary>
 | 
						||
        /// 构造函数
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="redisHelper"></param>
 | 
						||
        public CacheManager(RedisHelper redisHelper)
 | 
						||
        {
 | 
						||
            _redisDatabase = redisHelper._database;
 | 
						||
        }
 | 
						||
        /// <summary>
 | 
						||
        /// 缓存数据
 | 
						||
        /// </summary>
 | 
						||
        /// <typeparam name="T"></typeparam>
 | 
						||
        /// <param name="cacheKey"></param>
 | 
						||
        /// <param name="dataFetcher"></param>
 | 
						||
        /// <param name="seconds">缓存时间秒,0=int.max ,</param>
 | 
						||
        /// <returns></returns>
 | 
						||
        public async Task<T> GetConvertVale<T>(string cacheKey, Func<Task<T>> dataFetcher, int seconds = 0)
 | 
						||
        {
 | 
						||
            var cacheData = await _redisDatabase.StringGetAsync(cacheKey);
 | 
						||
            if (cacheData.IsNull)
 | 
						||
            {
 | 
						||
                var temp = await dataFetcher();
 | 
						||
                cacheData = JsonConvert.SerializeObject(temp);
 | 
						||
                seconds = seconds == 0 ? int.MaxValue : seconds;
 | 
						||
                await _redisDatabase.StringSetAsync(cacheKey, cacheData, TimeSpan.FromSeconds(seconds), When.NotExists);
 | 
						||
                return temp;
 | 
						||
            }
 | 
						||
            return JsonConvert.DeserializeObject<T>(cacheData);
 | 
						||
        }
 | 
						||
    }
 | 
						||
}
 |