我正在使用将..NET Core添加到Redis连接StackExchange.Redis,它当前看起来像这样:
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
Startup
public void ConfigureServices(IServiceCollection services) { services.AddRedisMultiplexer(() => ConfigurationOptions.Parse(Configuration["ConnectionStrings:Redis"])); ...
这意味着我可以IConnectionMultiplexer在任何地方进行依赖注入。
IConnectionMultiplexer
我的问题是:ConnectionMultiplexer是可以重复使用,所以我用AddSingleton,以保持一个实例整个应用程序。但是我也可以AddScoped在请求期间使用一个。哪个更好?为什么?
ConnectionMultiplexer
AddSingleton
AddScoped
该应用程序的预期负载是多少?如果您有很多并发性,我认为使用AddScoped将意味着为每个请求启动和关闭连接的大量不必要的负担。
同样,恕我直言,这些观察结果表明您应该使用 AddSingleton
(…)很少会短暂使用ConnectionMultiplexer,因为这种想法是要重用此对象。 Redis的另一个常见用途是作为发布/订阅消息分发工具。这也很简单,并且 在连接失败的情况下,ConnectionMultiplexer将处理重新订阅所请求通道的所有详细信息。
(…)很少会短暂使用ConnectionMultiplexer,因为这种想法是要重用此对象。
Redis的另一个常见用途是作为发布/订阅消息分发工具。这也很简单,并且 在连接失败的情况下,ConnectionMultiplexer将处理重新订阅所请求通道的所有详细信息。
此外,您将节省仅具有ConnectionMultiplexer(IMHO)实例的内存。