前几天挖了个坑,今天就来填这个坑了。关于在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帮助类:

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文件,把之前的构造函数换成如下所示:

        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类型,就可以了:

public IConfigurationRoot Configuration { get; }

以上。

Last modification:May 13, 2018
如果觉得我的文章对你有用,请随意赞赏