Проверяет понимание организации хранения данных для кэша с TTL, включая идентификатор таймера и значение.
Кэш с TTL (Time To Live) требует хранить не только сами данные, но и время их жизни. Простое хранение пар ключ-значение недостаточно, так как нужно знать, когда запись устарела. Оптимальный подход — хранить для каждого ключа объект, содержащий значение и метку времени истечения (expiresAt). Это позволяет при чтении проверять, не истек ли срок, и при необходимости удалять запись.
const cache = new Map();
function set(key, value, ttlMs) {
const expiresAt = Date.now() + ttlMs;
cache.set(key, { value, expiresAt });
}
function get(key) {
const entry = cache.get(key);
if (!entry) return null;
if (Date.now() > entry.expiresAt) {
cache.delete(key);
return null;
}
return entry.value;
}Здесь каждый элемент кэша — объект с полями value и expiresAt. При получении проверяется актуальность, и устаревшие записи удаляются лениво (при обращении). Это просто и эффективно для большинства сценариев.
Можно также хранить отдельный таймер для каждой записи, чтобы автоматически удалять её по истечении TTL. Например, использовать setTimeout и хранить его ID в объекте записи. Это удобно, если нужно освобождать память сразу, но требует аккуратного управления таймерами (очистка при удалении). Для больших кэшей лучше использовать библиотеки типа node-cache или Redis, которые реализуют TTL нативно.
Для простого кэша с TTL достаточно хранить объект с value и expiresAt в Map. Это легко реализовать, понятно и покрывает большинство задач. Если требуется автоматическая очистка или масштабирование, стоит рассмотреть готовые решения.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию