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