using System;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace IRaCIS.Core.Infra.Common.Cache
{
    /// 
    /// Redis缓存
    /// 
    public class RedisCache : ICache
    {
        public long Del(params string[] key)
        {
            return RedisHelper.Del(key);
        }
        public Task DelAsync(params string[] key)
        {
            return RedisHelper.DelAsync(key);
        }
        public async Task DelByPatternAsync(string pattern)
        {
            if (string.IsNullOrEmpty(pattern))
                return default;
            pattern = Regex.Replace(pattern, @"\{.*\}", "*");
            var keys = (await RedisHelper.KeysAsync(pattern));
            if(keys != null && keys.Length > 0)
            {
                return await RedisHelper.DelAsync(keys);
            }
            return default;
        }
        public bool Exists(string key)
        {
            return RedisHelper.Exists(key);
        }
        public Task ExistsAsync(string key)
        {
            return RedisHelper.ExistsAsync(key);
        }
        public string Get(string key)
        {
            return RedisHelper.Get(key);
        }
        public T Get(string key)
        {
            return RedisHelper.Get(key);
        }
        public Task GetAsync(string key)
        {
            return RedisHelper.GetAsync(key);
        }
        public Task GetAsync(string key)
        {
            return RedisHelper.GetAsync(key);
        }
        public bool Set(string key, object value)
        {
            return RedisHelper.Set(key, value);
        }
        public bool Set(string key, object value, TimeSpan expire)
        {
            return RedisHelper.Set(key, value, expire);
        }
        public Task SetAsync(string key, object value)
        {
            return RedisHelper.SetAsync(key, value);
        }
        public Task SetAsync(string key, object value, TimeSpan expire)
        {
            return RedisHelper.SetAsync(key, value, expire);
        }
    }
}