我想使用Redis功能,例如来自MVC控制器的位域和哈希字段。我知道ASP.NET核心中有built in caching support,但这只支持基本的GET和SET命令,而不是我应用程序中需要的命令。我知道如何从普通(例如。控制台)应用程序使用StackExchange.Redis,但我不知道如何在ASP站点中设置它。
我应该在哪里放置所有连接初始化代码,以便之后可以从控制器访问它?这是我会使用依赖注入吗?
答案 0 :(得分:14)
在您的Startup类的ConfigureServices方法中,您将要添加
services.AddSingleton<IConnectionMultiplexer>(ConnectionMultiplexer.Connect("yourConnectionString"));
然后,您可以通过将构造函数签名更改为以下内容来使用依赖项注入:
public YourController : Controller
{
private IConnectionMultiplexer _connectionMultiplexer;
public YourController(IConnectionMultiplexer multiplexer)
{
this._connectionMultiplexer = multiplexer;
}
}
答案 1 :(得分:7)
This blog有一个关于在ASP.NET Core中实现redis服务的文章(附带full code repo)。它有一个样板服务,可以自动将POCO类序列化为redis哈希集。
答案 2 :(得分:1)
简单的方法是安装Nuget软件包
Install-Package Microsoft.Extensions.Caching.Redis
在您的ASP MVC .NET Core项目中。
然后在类Startup中使用ConfigureServices方法配置依赖项注入服务:
services.AddDistributedRedisCache(option =>
{
option.Configuration = Configuration["AzureCache:ConnectionString"];
option.InstanceName = "master";
});
在appsettings.json中添加绑定连接字符串以进行发布部署,如下所示:
"AzureCache": {
"ConnectionString": ""
}
如果使用Azure,请在“应用程序设置”中为ASP MVC .NET Core App Service添加应用程序设置名称,以在部署后在运行时在Azure端进行绑定。出于安全原因,不应在代码中出现用于生产的连接字符串。
Azure binding connection string
添加绑定,例如开发appsettings.Development.json
"AzureCache": {
"ConnectionString": "<your connection string>"
}
将服务注入构造函数中的控制器:
public class SomeController : Controller
{
public SomeController(IDistributedCache distributedCache)
答案 3 :(得分:0)
我更喜欢在配置中使用用户名/密码
@GetMapping(value = "/attachment/{fileId}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public Mono<byte[]> get(@PathVariable String fileId) {
return this.webClient.get()
.uri(builder ->
builder.scheme("https")
.host("external-service.com")
.path("/{fileId}")
.build(fileId)
).attributes(clientRegistrationId("credentials"))
.accept(MediaType.APPLICATION_OCTET_STREAM)
.retrieve()
.bodyToMono(byte[].class);
}