using BotSharp.Abstraction.Infrastructures; using Newtonsoft.Json; using StackExchange.Redis; namespace BotSharp.Core.Infrastructures; public class CacheService : ICacheService { private readonly BotSharpDatabaseSettings _settings; private static ConnectionMultiplexer redis = null!; public CacheService(BotSharpDatabaseSettings settings) { _settings = settings; } public async Task GetAsync(string key) { if (string.IsNullOrEmpty(_settings.Redis)) { return default; } if (redis == null) { redis = ConnectionMultiplexer.Connect(_settings.Redis); } var db = redis.GetDatabase(); var value = await db.StringGetAsync(key); if (value.HasValue) { return JsonConvert.DeserializeObject(value); } return default; } public async Task GetAsync(string key, Type type) { if (string.IsNullOrEmpty(_settings.Redis)) { return default; } if (redis == null) { redis = ConnectionMultiplexer.Connect(_settings.Redis); } var db = redis.GetDatabase(); var value = await db.StringGetAsync(key); if (value.HasValue) { return JsonConvert.DeserializeObject(value, type); } return default; } public async Task SetAsync(string key, T value, TimeSpan? expiry) { if (string.IsNullOrEmpty(_settings.Redis)) { return; } var db = redis.GetDatabase(); await db.StringSetAsync(key, JsonConvert.SerializeObject(value), expiry); } }