Ответ
Кэширование — это техника хранения копии данных или результатов вычислений во временном, быстродоступном хранилище (кэше) для ускорения последующих обращений к ним и снижения нагрузки на основную систему (БД, внешний API).
Типичные сценарии использования:
- Кэширование на стороне клиента: Браузер кэширует статические ресурсы (CSS, JS, изображения).
- Кэширование на стороне сервера:
- Кэш запросов к БД (используя Redis, Memcached).
- Кэширование ответов API (полных HTML-страниц или JSON-данных).
Пример реализации на Node.js с Redis:
const redis = require('redis');
const client = redis.createClient();
async function getUser(id) {
const cacheKey = `user:${id}`;
// 1. Попытка получить данные из кэша
const cachedUser = await client.get(cacheKey);
if (cachedUser) {
console.log('Cache hit!');
return JSON.parse(cachedUser);
}
console.log('Cache miss!');
// 2. Если в кэше нет, запрашиваем из БД (дорогая операция)
const userFromDb = await db.query('SELECT * FROM users WHERE id = ?', [id]);
// 3. Сохраняем результат в кэш на 5 минут (TTL = 300 секунд)
await client.setEx(cacheKey, 300, JSON.stringify(userFromDb));
return userFromDb;
}
Ключевые аспекты для проектирования:
- Стратегия инвалидации: Как и когда данные в кэше становятся неактуальными (TTL, инвалидация по событию).
- Выбор TTL (Time To Live): Баланс между актуальностью данных и нагрузкой на источник.
- Риски: Устаревшие данные (stale data), повышенное потребление памяти, сложность отладки.