Как реализовать кэширование так, чтобы сервис работал только с кэшем и не знал о БД? Данные меняются раз в 5 минут, допускаются устаревшие данные. Нужно ли ставить TTL на кэшируемые данные?

Можно вынести загрузку из БД в отдельный обновляющий компонент, а сервису чтения дать только кеш. TTL выбирают по допустимой давности данных и поведению при сбое обновления, а не автоматически ставят пять минут.

Короткий ответ

Что ответить на собеседовании

Можно вынести загрузку из БД в отдельный обновляющий компонент, а сервису чтения дать только кеш. TTL выбирают по допустимой давности данных и поведению при сбое обновления, а не автоматически ставят пять минут.

Подробный разбор

Ответ с пояснениями

Можно вынести загрузку из БД в отдельный обновляющий компонент, а сервису чтения дать только кеш. TTL выбирают по допустимой давности данных и поведению при сбое обновления, а не автоматически ставят пять минут.

Обновляющий процесс периодически строит новую версию и атомарно переключает указатель на неё, чтобы читатель не видел частично загруженный набор. Сервис должен понимать состояние первого запуска и отсутствие данных.

Если последний успешный снимок допустимо использовать при сбое, жёсткое удаление через пять минут может ухудшить доступность. Храните updated_at, контролируйте возраст и уведомляйте о неудачных обновлениях. Если есть предел допустимой давности, задайте hard TTL или явный отказ после него. Без TTL всё равно нужны контроль памяти и удаление устаревших ключей.

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

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

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

Подробнее