Implementação do ICacheService usando IDistributedCache (Redis). Pode ser trocado por MemoryCache sem alterar nada fora da Infra.
namespace Infra.Cache;
public class CacheService : ICacheService
{
private readonly IDistributedCache _cache;
public CacheService(IDistributedCache cache)
{
_cache = cache;
}
public async Task<T?> GetAsync<T>(string key, CancellationToken ct = default)
{
var data = await _cache.GetStringAsync(key, ct);
return data is null ? default : JsonSerializer.Deserialize<T>(data);
}
public async Task SetAsync<T>(string key, T value, TimeSpan expiration, CancellationToken ct = default)
{
var options = new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = expiration };
var data = JsonSerializer.Serialize(value);
await _cache.SetStringAsync(key, data, options, ct);
}
public Task RemoveAsync(string key, CancellationToken ct = default) =>
_cache.RemoveAsync(key, ct);
}