首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >ASP.NET Core 2.0下使用Redis——基于CSRedis实现

ASP.NET Core 2.0下使用Redis——基于CSRedis实现

作者头像
徐大嘴
发布2019-03-21 10:29:47
发布2019-03-21 10:29:47
5.1K0
举报
文章被收录于专栏:大嘴说编程大嘴说编程

前几天挖了个坑,今天就来填这个坑了。关于在ASP.NET Core 2.0下使用Redis的问题,目前StackExchange.Redis已经支持.Net Core 2.0了,而微软提供的Microsoft.Extensions.Caching.Redis.Core方法,也是对StackExchange.Redis的一种官方封装,是基于StackExchange.Redis的,但是大家反映StackExchange.Redis在.Net Core下高并发容易出现死锁问题,目前没有解决办法。

本例是基于CSRedis来实现的,CSRedis 是国外大神写的,经过少量修改,现已支持 .NETCore

使用方法,先新建一个Redis缓存的类库,我这里命名为:Biz126.RedisCache,在该类库下新增一个名为RedisHelper的Redis帮助类:

代码语言:javascript
复制
namespace Biz126.RedisCache
{
    public class RedisHelper : CSRedis.QuickHelperBase
    {
        public static IConfigurationRoot Configuration { get; internal set; }
        public static void InitializeConfiguration(IConfigurationRoot cfg)
        {
            Configuration = cfg;
            string ip, pass;
            if (!int.TryParse(Convert.ToString(cfg["Redis:port"]), out int port)) port = 6379;
            if (!int.TryParse(Convert.ToString(cfg["Redis:poolsize"]), out int poolsize)) poolsize = 50;
            if (!int.TryParse(Convert.ToString(cfg["Redis:database"]), out int database)) database = 0;
            ip = Convert.ToString(cfg["Redis:ip"]);
            pass = Convert.ToString(cfg["Redis:pass"]);
            Name = Convert.ToString(cfg["Redis:name"]);
            Instance = new CSRedis.ConnectionPool(ip, port, poolsize);
            Instance.Connected += (s, o) =>
            {
                CSRedis.RedisClient rc = s as CSRedis.RedisClient;
                if (!string.IsNullOrEmpty(pass)) rc.Auth(pass);
                if (database > 0) rc.Select(database);
            };
        }
    }
}

需要添加对Microsoft.Extensions.Configuration的引用。

在主项目下,引用该类库,打开Startup文件,把之前的构造函数换成如下所示:

代码语言:javascript
复制
        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();

            if (env.IsDevelopment())
            {
                // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
                builder.AddApplicationInsightsSettings(developerMode: true);
            }
            Configuration = builder.Build();
            RedisHelper.InitializeConfiguration(Configuration);          //Redis  
        }

同时之前的Configuration属性,也需要对应的修改,换成IConfigurationRoot类型,就可以了:

代码语言:javascript
复制
public IConfigurationRoot Configuration { get; }

以上。


本文作者:老徐

本文链接:https://cloud.tencent.com/developer/article/1405652

转载时须注明出处及本声明

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档