Как реализован функционал работы с Redis: в отдельном микросервисе или в составе другого сервиса
Что проверяют
Понимаете ли вы, что Redis это инфраструктура, как база данных, а не кусок бизнес-логики, который надо прятать за отдельным сервисом. Интервьюеру важно, как вы проводите границы владения данными. Следом обычно спрашивают, что будет с сервисом, если Redis упадёт.
Как отвечать
Сначала расставьте термины: сам Redis всегда отдельный процесс, и обращение к нему всегда идёт по сети. Вопрос в другом: ходит ли каждый сервис в Redis своим клиентом или вы строите промежуточный «кэш-сервис» с REST или gRPC API.
Обычно правильный вариант: работа с Redis живёт внутри того сервиса, чьи это данные.
- клиент: в Spring Boot через
spring-boot-starter-data-redis, по умолчанию там Lettuce. Для распределённых блокировок и сложных структур часто берут Redisson; - кэш:
@EnableCaching,@Cacheableи@CacheEvictповерхRedisCacheManagerс TTL на каждый кэш. Сериализатор выбирают явно, JSON вместо JDK-сериализации; - изоляция: у каждого сервиса свой префикс ключей, а лучше свой инстанс, чтобы чужой всплеск не вытеснял ваши данные;
- отказоустойчивость: таймауты на клиенте, кэш как необязательный слой (промах при недоступности вместо 500), Sentinel или Redis Cluster для высокой доступности.
Отдельный сервис оправдан, когда у него своя предметная область: общий rate limiter для платформы, сессии, фича-флаги со своим API. Но и тогда это сервис со смыслом, а не прокси к GET и SET.
Если на проекте было иначе, так и расскажите и добавьте, что поменяли бы. Плюсом будет знание, что после смены лицензии Redis в 2024 году появился совместимый форк Valkey, и часть команд перешла на него.
Где спотыкаются
Утверждают, что в составе сервиса Redis «локальный и без сетевой задержки». Сетевой вызов есть в обоих случаях, отдельный сервис просто добавляет второй.
Делают общий Redis, в который пишут все сервисы. Получается скрытая общая база: связность, конфликты ключей и невозможность менять формат данных.
Не продумывают падение Redis: без таймаутов и фолбэка кэш становится точкой отказа всей системы.