MVCコントローラーのビットフィールドやハッシュフィールドなどのRedis機能を使用したいと思います。 ASP.NETコアには ビルトインキャッシュサポート がありますが、これは基本的なGETおよびSETコマンドのみをサポートし、アプリケーションで必要なコマンドはサポートしません。通常の(コンソールなどの)アプリケーションからStackExchange.Redisを使用する方法は知っていますが、ASPサイトで設定する方法がわかりません。
コントローラーから後でアクセスできるように、すべての接続初期化コードをどこに配置すればよいですか?これは依存性注入を使用するものですか?
このブログ には、ASP.NET Coreへのredisサービスの実装に関する記事( full code repo )が記載されています。 POCOクラスを自動的にredisハッシュセットにシリアル化する定型サービスがあります。
StartupクラスのConfigureServicesメソッドに、追加する必要があります。
services.AddSingleton<IConnectionMultiplexer>(ConnectionMultiplexer.Connect("yourConnectionString"));
次に、コンストラクタシグネチャを次のようなものに変更することにより、依存性注入を使用できます。
public YourController : Controller
{
private IConnectionMultiplexer _connectionMultiplexer;
public YourController(IConnectionMultiplexer multiplexer)
{
this._connectionMultiplexer = multiplexer;
}
}
簡単な方法は、Nugetパッケージをインストールすることです
Install-Package Microsoft.Extensions.Caching.Redis
ASP MVC .NET Coreプロジェクト。
次に、ConfigureServicesメソッドのクラスStartupで依存性注入を使用してサービスを構成します。
services.AddDistributedRedisCache(option =>
{
option.Configuration = Configuration["AzureCache:ConnectionString"];
option.InstanceName = "master";
});
次のようなリリース展開用のappsettings.jsonにバインディング接続文字列を追加します。
"AzureCache": {
"ConnectionString": ""
}
Azureを使用する場合は、ASP MVC .NET Core App Serviceのアプリケーション設定でアプリケーション設定名を追加して、デプロイ後にAzure側で実行時にバインドします。本番用の接続文字列セキュリティ上の理由からコード内で発生しないようにしてください。
たとえば、バインディングを追加します開発appsettings.Development.json
"AzureCache": {
"ConnectionString": "<your connection string>"
}
コンストラクターでコントローラーにサービスを注入します。
public class SomeController : Controller
{
public SomeController(IDistributedCache distributedCache)