Что такое node-cache и зачем она нужна?
Библиотека node-cache — это простая и быстрая система кэширования для Node.js, написанная на TypeScript. Она позволяет хранить данные в памяти (in-memory cache), что значительно ускоряет доступ к часто запрашиваемой информации (например, результаты запросов к базе данных, API-ответы, вычисления). В TypeScript node-cache предоставляет строгую типизацию, что делает код более предсказуемым и безопасным.
Кэширование необходимо для снижения нагрузки на сервер, уменьшения времени отклика и экономии ресурсов при повторяющихся операциях. Node-cache идеально подходит для небольших и средних проектов, где не требуется распределенное кэширование (как Redis), но нужен легковесный in-memory кэш.
Установка
Установите пакет через npm или yarn:
npm install node-cache
# или
yarn add node-cacheДля TypeScript типы уже включены в пакет, дополнительно устанавливать @types не нужно.
Основные функции
- set(key, value, ttl) — сохраняет значение по ключу с опциональным временем жизни (TTL) в секундах.
- get(key) — получает значение по ключу. Возвращает undefined, если ключ отсутствует или истек.
- del(key) — удаляет один или несколько ключей.
- has(key) — проверяет наличие ключа в кэше.
- flushAll() — очищает весь кэш.
- getStats() — возвращает статистику (количество ключей, попаданий, промахов).
Пример кода на TypeScript
import NodeCache from 'node-cache';
// Создаем экземпляр кэша с TTL по умолчанию 60 секунд
const myCache = new NodeCache({ stdTTL: 60 });
// Типизированное значение
interface User {
id: number;
name: string;
}
// Сохраняем данные
const user: User = { id: 1, name: 'Alice' };
myCache.set('user_1', user);
// Получаем данные
const cachedUser = myCache.get<User>('user_1');
if (cachedUser) {
console.log(cachedUser.name); // Alice
} else {
console.log('Кэш пуст');
}
// Проверка наличия
console.log(myCache.has('user_1')); // true
// Удаление
myCache.del('user_1');
// Очистка всего кэша
myCache.flushAll();Когда использовать node-cache
- Часто запрашиваемые данные: например, список стран, курсы валют, конфигурации.
- Результаты тяжелых вычислений: кэширование результата дорогой операции на несколько секунд.
- API-шлюзы: кэширование ответов внешних API для снижения задержек и лимитов.
- Сессии: временное хранение данных сессии (если не требуется персистентность).
Избегайте node-cache, если вам нужно распределенное кэширование между несколькими серверами — в этом случае лучше использовать Redis. Также не подходит для больших объемов данных (более 1-2 ГБ), так как хранится в оперативной памяти.
Node-cache — отличный выбор для простых сценариев кэширования в TypeScript, где важна скорость и минимальная конфигурация.
Также в библиотеке
Конфигурация приложений Swift: инструменты и библиотеки для iOS/macOS
Кэширование в Java: Redis, Caffeine, Ehcache — полное руководство
Rate Limiting в TypeScript: библиотеки, стратегии и примеры