Redis在.NET 5+项目的应用(CSRedisCore)

引用包

dotnet add package CSRedisCore --version 3.6.8

应用模式

  • 工厂模式
  • 集成到构造器类
工厂模式
  1. 添加工具类:CSRedisHelper.cs
	/// <summary>
    /// Redis帮助类
    /// </summary>
    public class CSRedisHelper
    {
        static CSRedisClient redisManger = null;
        static CSRedisClient GetClient()
        {
            return redisManger;
        }
        public CSRedisHelper(string connectionString)
        {
            redisManger = new CSRedisClient(connectionString);      //Redis的连接字符串
        }
        /// <summary>
        /// 获取指定的键的集合
        /// </summary>
        /// <param name="pattern"></param>
        /// <returns></returns>
        public List<string> Keys(string pattern = null)
        {
            if (string.IsNullOrWhiteSpace(pattern))
                pattern = "*";
            return GetClient().Keys(pattern).ToList();
        }
    }
  1. 添加工厂类:RedisClientFactory.cs
	/// <summary>
    /// Redis工厂类
    /// </summary>
    public class RedisClientFactory
    {
        private static readonly ConcurrentDictionary<string, CSRedisHelper> CSRedisClients =
            new ConcurrentDictionary<string, CSRedisHelper>();
            
        public static CSRedisHelper GetClient(string connectionString)
        {
            return CSRedisClients.GetOrAdd(connectionString, new CSRedisHelper(connectionString));
        }
    }
  1. 测试调用
		protected static readonly CSRedisHelper RedisService = 
				RedisClientFactory.GetClient("连接字符串");
        public static void TestDeleteAll()
        {
            var watch = new Stopwatch();
            watch.Start();
            var keys = RedisService.Keys();
            if (!keys.IsNullOrNotData())
            {
                RedisService.KeyDel(keys);
            }
            watch.Stop();
            var ts = watch.Elapsed;

            Console.WriteLine($"删除{keys.Count}花费了{ts.TotalSeconds}");
        }
集成到构造器类
  1. 添加拓展工具类CacheExtension.cs
	public static class CacheExtension
    {
        /// <summary>
        /// 使用缓存
        /// </summary>
        /// <param name="hostBuilder">建造者</param>
        /// <returns></returns>
        public static IHostBuilder UseCache(this IHostBuilder hostBuilder)
        {
            hostBuilder.ConfigureServices((buidlerContext, services) =>
            {
                var CacheType = buidlerContext.Configuration["CacheType"].ToString();
                switch (CacheType)
                {
                    case "Memory": services.AddDistributedMemoryCache(); break;
                    case "Redis":
                        {
                            // => 初始化redis的两种使用方式
                            var csredis = new CSRedisClient(buidlerContext.Configuration["RedisConn"].ToString());
                            // 使用RedisHelper
                            services.AddSingleton(csredis);
                            RedisHelper.Initialization(csredis);

                            // 依赖注入使用自定义工具类
                            services.AddSingleton<ICSRedisCache>(new CSRedisCache(csredis));
                        }; break;
                    default: throw new Exception("缓存类型无效");
                }
            });
            return hostBuilder;
        }
    }
  1. 添加接口:ICSRedisCache
	/// <summary>
    /// CSRedis帮助类
    /// </summary>
    public interface ICSRedisCache
    {
        /// <summary>
        /// 根据Key获取值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        T StringGet<T>(string key);
    }
  1. 添加实现类:CSRedisCache
    /// <summary>
    /// Redis帮助实现类
    /// </summary>
    public class CSRedisCache : ICSRedisCache
    {
        private CSRedisClient csredis;

        public CSRedisCache(CSRedisClient csredis)
        {
            this.csredis = csredis;
        }
        /// <summary>
        /// 获取指定key的值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public T StringGet<T>(string key)
        {
            return csredis.Get<T>(key);
        }
    }
  1. 在Program.cs中调用
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
            // => 使用Redis
            .UseCache();
  1. 接口测试
        private readonly ICSRedisCache _iCSRedisCache;
        /// <summary>
        /// 构造函数依赖注入
        /// </summary>
        /// <param name="cSRedisCache"></param>
        public TestRedisController(ICSRedisCache cSRedisCache)
        {
            _iCSRedisCache = cSRedisCache;
        }
        [HttpGet]
        public ActionResult GetValueByKey(string key)
        {
            var value = _iCSRedisCache.StringGet<string>(key);
            return Ok(value);
        }
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值