lg_backend/langguanApi/Common/CacheManager.cs

46 lines
1.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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