using LY.App.Extensions.DI;
using StackExchange.Redis;
using System.Text.Json;
namespace LY.App.Common.Redis
{
    /// 
    /// redis 连接服务
    /// 
    public class RedisService
    {
        private readonly IDatabase _db;
        /// 
        /// 构造函数
        /// 
        /// 
        public RedisService(string connectionString)
        {
            var redis = ConnectionMultiplexer.Connect(connectionString);
            _db = redis.GetDatabase();
        }
        /// 
        /// 泛型存储数据到 Redis
        /// 
        public async Task SetAsync(string key, T value, TimeSpan? expiry = null)
        {
            string jsonData = JsonSerializer.Serialize(value);
            return await _db.StringSetAsync(key, jsonData, expiry);
        }
        /// 
        /// 泛型获取数据
        /// 
        public async Task GetAsync(string key)
        {
            string jsonData = await _db.StringGetAsync(key);
            return jsonData is not null ? JsonSerializer.Deserialize(jsonData) : default;
        }
        /// 
        /// 删除 Key
        /// 
        public async Task DeleteAsync(string key)
        {
            return await _db.KeyDeleteAsync(key);
        }
        /// 
        /// 检查 Key 是否存在
        /// 
        public async Task ExistsAsync(string key)
        {
            return await _db.KeyExistsAsync(key);
        }
    }
}