lg_backend/langguanApi/Common/CacheManager.cs

46 lines
1.5 KiB
C#
Raw Permalink Normal View History

2024-05-20 14:56:49 +00:00
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;
2024-08-04 14:18:34 +00:00
/// <summary>
/// 构造函数
/// </summary>
/// <param name="redisHelper"></param>
2024-05-20 14:56:49 +00:00
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);
}
}
}