> Как реализовать кэш с методами get, set, delete и clear с поддержкой TTL в JavaScript (JavaScript)

Уровень: middle · Роль: frontend · Категория: Технические вопросы

Компании: Spotware

Стек: JavaScript

> Пример ответа

Для реализации кэша с TTL (время жизни) в JavaScript можно использовать класс, хранящий данные в Map вместе с меткой времени. Каждый элемент будет содержать значение и время истечения. Методы get, set, delete и clear управляют данными, а проверка TTL происходит при каждом get.

JAVASCRIPT
class TTLCache {
constructor(defaultTTL = 60000) { // TTL по умолчанию 60 секунд
this.cache = new Map();
this.defaultTTL = defaultTTL;
}
set(key, value, ttl = this.defaultTTL) {
const expiresAt = Date.now() + ttl;
this.cache.set(key, { value, expiresAt });
}
get(key) {
const entry = this.cache.get(key);
if (!entry) return undefined;
if (Date.now() > entry.expiresAt) {
this.cache.delete(key);
return undefined;
}
return entry.value;
}
delete(key) {
return this.cache.delete(key);
}
clear() {
this.cache.clear();
}
// Опционально: очистка просроченных записей
cleanExpired() {
const now = Date.now();
for (const [key, entry] of this.cache) {
if (now > entry.expiresAt) {
this.cache.delete(key);
}
}
}
}
// Пример использования:
const cache = new TTLCache(5000); // 5 секунд
cache.set('user', { name: 'Alice' });
console.log(cache.get('user')); // { name: 'Alice' }
setTimeout(() => console.log(cache.get('user')), 6000); // undefined

Ключевые особенности:

  • Используется Map для быстрого доступа и сохранения порядка вставки.
  • TTL задается в миллисекундах, можно переопределить для каждого ключа.
  • При get автоматически удаляются просроченные записи.
  • Метод cleanExpired позволяет очищать кэш в фоне (например, по таймеру).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью