Dependency injection 在ASP.NET核心控制器中使用StackExchange.Redis

Dependency injection 在ASP.NET核心控制器中使用StackExchange.Redis,dependency-injection,asp.net-core,redis,Dependency Injection,Asp.net Core,Redis,我想使用Redis的特性,比如MVC控制器中的位字段和哈希字段。我知道ASP.NET core中有一些命令,但它只支持基本的GET和SET命令,而不支持我的应用程序中需要的命令。我知道如何从普通(如控制台)应用程序中使用StackExchange.Redis,但我不知道如何在ASP站点中设置它 我应该把所有的连接初始化代码放在哪里,这样我以后就可以从控制器访问它了?这是我使用依赖项注入的原因吗?有一篇关于在ASP.NET内核中实现redis服务的文章(附带)。它有一个样板服务,可以自动将POCO

我想使用Redis的特性,比如MVC控制器中的位字段和哈希字段。我知道ASP.NET core中有一些命令,但它只支持基本的GET和SET命令,而不支持我的应用程序中需要的命令。我知道如何从普通(如控制台)应用程序中使用StackExchange.Redis,但我不知道如何在ASP站点中设置它


我应该把所有的连接初始化代码放在哪里,这样我以后就可以从控制器访问它了?这是我使用依赖项注入的原因吗?

有一篇关于在ASP.NET内核中实现redis服务的文章(附带)。它有一个样板服务,可以自动将POCO类序列化到redis哈希集中。

在Startup类的ConfigureServices方法中,您需要添加

services.AddSingleton(ConnectionMultiplexer.Connect(“yourConnectionString”);
然后,您可以通过将构造函数签名更改为以下内容来使用依赖项注入:

"AzureCache": {
    "ConnectionString": "" 
  }  
公共控制器:控制器
{
专用只读IConnectionMultiplexer\u连接多路复用器;
公共控制器(IConnectionMultiplexer多路复用器)
{
此._连接多路复用器=多路复用器;
}
}

简单的方法是安装Nuget软件包

Install-Package Microsoft.Extensions.Caching.Redis 
在ASP MVC.NET核心项目中

然后在方法ConfigureServices中的类启动中使用依赖项注入配置服务:

        services.AddDistributedRedisCache(option =>
        {
            option.Configuration = Configuration["AzureCache:ConnectionString"];
            option.InstanceName = "master";
        });
在appsettings.json中为发布部署添加绑定连接字符串,如下所示:

"AzureCache": {
    "ConnectionString": "" 
  }  
如果使用Azure,请在应用程序设置中为ASP MVC.NET核心应用程序服务添加应用程序设置名称,以便在部署后在Azure端的运行时进行绑定。出于安全原因,生产连接字符串不应出现在代码中

添加绑定,例如development appsettings.development.json

"AzureCache": {
    "ConnectionString": "<your connection string>"
  }

我更喜欢在配置中使用用户名/密码

//StackExchange.Redis for configuration options
 var redisConfiguration = new ConfigurationOptions
            {
                EndPoints = { "serverinfo:portinfo" },
                User = username,
                Password = password
                //,Ssl = true
            };


            services.AddStackExchangeRedisCache(options => { options.ConfigurationOptions = redisConfiguration; });

这看起来很不错,但请记住,这只实现了一个
IDistributedCache
,这是一个非常有限的Redis实现。这里有更多信息:非常简单的解决方案值得注意的是,将用户名和密码以明文形式直接存储在代码中通常不是一个好的做法,尤其是如果您的代码(希望如此!)通过源代码控制进行管理,因为这会在代码受损的情况下打开一个潜在的漏洞。前面的解决方法是将凭据存储在单独的配置文件中,该文件可以是本地的
secrets.json
、服务器上的环境变量或ASP.NET Core支持的任何其他配置提供程序。是的,将加密凭据存储在单独的文件中是很好的。我提到的是用户用户名/密码密钥对。Redis ACL有加密密码和所有配置的选项:)它的最佳实践是使用用户名/密码启用ssl,而不是只使用服务器和密码或默认用户。啊哈,我明白你的意思了。谢谢你澄清这一点。