gpt4 book ai didi

redis - 在 .NET Core 依赖注入(inject)中, `StackExchange.Redis.ConnectionMultiplexer` 应该是 `AddSingleton` 还是 `AddScope`?

转载 作者:IT王子 更新时间:2023-10-29 05:57:20 26 4
gpt4 key购买 nike

我正在使用 StackExchange.Redis 添加到 .NET Core 的 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 进行依赖注入(inject)。

我的问题是:ConnectionMultiplexerdesigned to be reused ,所以我使用 AddSingleton 为整个应用程序保留一个实例。但是,我也可以使用 AddScoped 在请求期间使用一个。哪个更好?为什么?

最佳答案

应用程序的预期负载是多少?如果您有很多并发性,我认为使用 AddScoped 将意味着为每个请求启动和关闭连接带来很多不必要的负担。

此外,恕我直言,这些观察表明您应该使用 AddSingleton

(...) it is exceptionally rare that you would want to use a ConnectionMultiplexer briefly, as the idea is to re-use this object.

Another common use of redis is as a pub/sub message distribution tool; this is also simple, and in the event of connection failure, the ConnectionMultiplexer will handle all the details of re-subscribing to the requested channels.

此外,您将节省只有一个 ConnectionMultiplexer 实例的内存(恕我直言)。

关于redis - 在 .NET Core 依赖注入(inject)中, `StackExchange.Redis.ConnectionMultiplexer` 应该是 `AddSingleton` 还是 `AddScope`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40844665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com