Какие lifetime существуют в .NET DI и почему Redis ConnectionMultiplexer следует зарегистрировать как Singleton?

В .NET DI есть Transient, Scoped и Singleton. ConnectionMultiplexer из StackExchange.Redis обычно регистрируют как 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее