using langguanApi.Common.Redis;
using langguanApi.Extensions.AutoDI;
using Newtonsoft.Json;
using StackExchange.Redis;
namespace langguanApi.Common
{
    /// 
    /// 缓存管理
    /// 
    [ServiceInjection(InjectionType.Singleton)]
    public class CacheManager
    {
        private readonly IDatabase _redisDatabase;
        /// 
        /// 构造函数
        /// 
        /// 
        public CacheManager(RedisHelper redisHelper)
        {
            _redisDatabase = redisHelper._database;
        }
        /// 
        /// 缓存数据
        /// 
        /// 
        /// 
        /// 
        /// 缓存时间秒,0=int.max ,
        /// 
        public async Task GetConvertVale(string cacheKey, Func> 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(cacheData);
        }
    }
}