Я добавляю соединение Redis с .NET Core, используя StackExchange.Redis
, сейчас оно выглядит примерно так:
public static IServiceCollection AddRedisMultiplexer(
this IServiceCollection services,
Func<ConfigurationOptions> getOptions = null)
{
// Get the options or assume localhost, as these will be set in Startup.ConfigureServices assume they won't change
var options = getOptions?.Invoke() ?? ConfigurationOptions.Parse("localhost");
// The Redis is a singleton, shared as much as possible.
return services.AddSingleton<IConnectionMultiplexer>(provider => ConnectionMultiplexer.Connect(options));
}
Затем в Startup
public void ConfigureServices(IServiceCollection services)
{
services.AddRedisMultiplexer(() =>
ConfigurationOptions.Parse(Configuration["ConnectionStrings:Redis"]));
...
Это означает, что я могу использовать IConnectionMultiplexer
для внедрения зависимостей где угодно.
Мой вопрос: ConnectionMultiplexer
предназначен для повторного использования, поэтому я использовал AddSingleton
, чтобы сохранить один экземпляр для всего приложения. Однако я также мог бы использовать AddScoped
, чтобы использовать его на время запроса. Что лучше и почему?