Можно вынести загрузку из БД в отдельный обновляющий компонент, а сервису чтения дать только кеш. TTL выбирают по допустимой давности данных и поведению при сбое обновления, а не автоматически ставят пять минут.
Как реализовать кэширование так, чтобы сервис работал только с кэшем и не знал о БД? Данные меняются раз в 5 минут, допускаются устаревшие данные. Нужно ли ставить TTL на кэшируемые данные?
Можно вынести загрузку из БД в отдельный обновляющий компонент, а сервису чтения дать только кеш. TTL выбирают по допустимой давности данных и поведению при сбое обновления, а не автоматически ставят пять минут.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Можно вынести загрузку из БД в отдельный обновляющий компонент, а сервису чтения дать только кеш. TTL выбирают по допустимой давности данных и поведению при сбое обновления, а не автоматически ставят пять минут.
Обновляющий процесс периодически строит новую версию и атомарно переключает указатель на неё, чтобы читатель не видел частично загруженный набор. Сервис должен понимать состояние первого запуска и отсутствие данных.
Если последний успешный снимок допустимо использовать при сбое, жёсткое удаление через пять минут может ухудшить доступность. Храните updated_at, контролируйте возраст и уведомляйте о неудачных обновлениях. Если есть предел допустимой давности, задайте hard TTL или явный отказ после него. Без TTL всё равно нужны контроль памяти и удаление устаревших ключей.