Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Node.js: cache invalidation, TTL, write-through, write-behind, cache-aside

Как реализовать инвалидацию кэша — какие стратегии обновления закэшированных данных существуют?

Вопрос проверяет понимание стратегий инвалидации кэша, необходимых для поддержания актуальности данных в распределенных системах.

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

Инвалидация кэша — это процесс удаления или обновления устаревших данных в кэше. Основные стратегии: TTL (время жизни), write-through (запись в кэш и БД одновременно), write-behind (асинхронная запись), cache-aside (приложение само управляет кэшем). Выбор зависит от требований к согласованности и производительности.

Длинный ответ

Что такое инвалидация кэша?

Инвалидация кэша — это механизм, который гарантирует, что данные в кэше остаются актуальными и соответствуют источнику истины (например, базе данных). Без неё пользователи могут получать устаревшую информацию, что критично для финансовых систем, каталогов товаров или любых приложений с частыми обновлениями.

Основные стратегии

  • TTL (Time-To-Live): Данные автоматически удаляются через заданный промежуток времени. Простота реализации, но возможна задержка в актуализации.
  • Write-Through: При записи данные одновременно сохраняются в кэш и БД. Гарантирует согласованность, но увеличивает задержку записи.
  • Write-Behind (Write-Back): Данные сначала записываются в кэш, а затем асинхронно — в БД. Высокая производительность записи, но риск потери данных при сбое.
  • Cache-Aside (Lazy Loading): Приложение сначала проверяет кэш, при промахе загружает данные из БД и помещает в кэш. Инвалидация происходит принудительно при обновлении данных.

Пример на JavaScript (Cache-Aside с Redis)

const redis = require('redis');
const client = redis.createClient();

async function getUser(id) {
  const cached = await client.get(`user:${id}`);
  if (cached) return JSON.parse(cached);

  const user = await db.findUser(id); // запрос в БД
  await client.setEx(`user:${id}`, 3600, JSON.stringify(user)); // TTL 1 час
  return user;
}

async function updateUser(id, data) {
  await db.updateUser(id, data);
  await client.del(`user:${id}`); // принудительная инвалидация
}

Вывод

Выбор стратегии зависит от компромисса между согласованностью данных и производительностью. TTL подходит для редко изменяемых данных, write-through — для критичных к актуальности, write-behind — для высоконагруженных систем, cache-aside — для гибкого управления. Инвалидация кэша — обязательный элемент архитектуры, предотвращающий устаревание данных.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Node.js

    Node.js

  • Redis

    Redis

Ключевые слова

#cache invalidation

#TTL

#write-through

#write-behind

#cache-aside

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию