using Microsoft.Extensions.Caching.Distributed; using System.Text.Json; namespace PARR.DAL.CacheServices { internal class RedisCacheService : IRedisCacheService { private readonly IDistributedCache cache; public RedisCacheService(IDistributedCache cache) { this.cache = cache; } public async Task GetCachedDataAsync(string key) { var jsonData = await cache.GetStringAsync(key); if (jsonData == null) return default(T); return JsonSerializer.Deserialize(jsonData); } public T? GetCachedData(string key) { var jsonData = cache.GetString(key); if (jsonData == null) return default(T); return JsonSerializer.Deserialize(jsonData); } public void SetCachedData(string key, T data, TimeSpan cacheDuration) { var options = new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = cacheDuration }; var jsonData = JsonSerializer.Serialize(data); cache.SetString(key, jsonData, options); } public async Task SetCachedDataAsync(string key, T data, TimeSpan cacheDuration) { var options = new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = cacheDuration }; var jsonData = JsonSerializer.Serialize(data); await cache.SetStringAsync(key, jsonData, options); } } }