В .NET DI есть Transient, Scoped и Singleton. ConnectionMultiplexer из StackExchange.Redis обычно регистрируют как Singleton, потому что он потокобезопасен и рассчитан на длительное совместное использование.
Какие lifetime существуют в .NET DI и почему Redis ConnectionMultiplexer следует зарегистрировать как Singleton?
В .NET DI есть Transient, Scoped и Singleton. ConnectionMultiplexer из StackExchange.Redis обычно регистрируют как Singleton, потому что он потокобезопасен и рассчитан на длительное совместное использование.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В .NET DI есть Transient, Scoped и Singleton. ConnectionMultiplexer из StackExchange.Redis обычно регистрируют как Singleton, потому что он потокобезопасен и рассчитан на длительное совместное использование.
Создание мультиплексора на каждый запрос приводит к лишним подключениям и затратам на инициализацию. Один экземпляр переиспользуют для множества операций; GetDatabase возвращает лёгкий объект доступа, не отдельное дорогое соединение на каждый вызов.
Владелец контейнера освобождает мультиплексор при завершении приложения; нельзя оборачивать общий экземпляр в using внутри каждого запроса. Несколько конфигураций Redis могут требовать отдельных экземпляров. Это не означает один singleton на все процессы или поды.
Источник: seredis.dev.