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