42 lines
1.4 KiB
C#
42 lines
1.4 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;
|
|||
|
|
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);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|