Кэширование в Node.js: Redis, Memcached и Node-Cache

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Кэширование в JavaScript (Node.js): Redis и другие инструменты

Кэширование — одна из ключевых стратегий оптимизации производительности серверных приложений на Node.js. Оно позволяет снизить нагрузку на базы данных, уменьшить время отклика API и сократить затраты на инфраструктуру. В этой статье мы разберём основные инструменты кэширования для Node.js: Redis, Node-Cache (встроенная библиотека) и Memcached, сравним их подходы и покажем реальные примеры кода.

Зачем нужно кэширование в Node.js?

Без кэша каждый запрос к популярному ресурсу может приводить к многократным обращениям к базе данных или внешним API. Кэш сохраняет часто запрашиваемые данные в быстром хранилище (оперативная память), что даёт:

  • Снижение времени ответа (latency) с 100-500 мс до 1-5 мс.
  • Уменьшение количества запросов к БД и внешним сервисам.
  • Повышение пропускной способности сервера (RPS).

1. Redis — король кэширования

Redis — это in-memory хранилище данных типа "ключ-значение", которое часто используется как кэш, брокер сообщений и база данных. В Node.js для работы с Redis используется библиотека redis (или ioredis).

Установка и подключение

npm install redis
const redis = require('redis');
const client = redis.createClient({
  url: 'redis://localhost:6379'
});

client.on('error', (err) => console.error('Redis Error:', err));
await client.connect();

// Пример кэширования данных с TTL
async function getCachedData(key) {
  const cached = await client.get(key);
  if (cached) return JSON.parse(cached);

  const freshData = { message: 'Hello from DB', time: Date.now() };
  await client.setEx(key, 60, JSON.stringify(freshData)); // TTL 60 сек
  return freshData;
}

Особенности Redis для Node.js

  • Поддержка TTL — автоматическое удаление устаревших записей.
  • Структуры данных — строки, списки, множества, хеши, сортированные множества.
  • Pub/Sub — можно строить системы real-time уведомлений.
  • Кластеризация — горизонтальное масштабирование без потери производительности.

2. Node-Cache — лёгкий in-memory кэш без внешних зависимостей

Node-Cache — это простая библиотека для кэширования данных прямо в памяти процесса Node.js. Идеально подходит для небольших проектов, микросервисов или когда не хочется поднимать Redis.

Установка и пример

npm install node-cache
const NodeCache = require('node-cache');
const myCache = new NodeCache({ stdTTL: 100, checkperiod: 120 });

// Сохранение данных
myCache.set('user:123', { name: 'Alice', role: 'admin' });

// Получение данных
const user = myCache.get('user:123');
if (user === undefined) {
  // данных нет в кэше — нужно загрузить из БД
  console.log('Cache miss');
} else {
  console.log('Cache hit:', user);
}

// Удаление по ключу
myCache.del('user:123');

// Очистка всего кэша
myCache.flushAll();

Плюсы и минусы Node-Cache

  • Плюсы: не требует внешнего сервера, простой API, автоматическая очистка по TTL.
  • Минусы: кэш хранится только в одном процессе — при рестарте сервера данные теряются; нельзя использовать между несколькими инстансами Node.js.

3. Memcached — распределённый кэш с минимальным оверхедом

Memcached — ещё одно популярное in-memory хранилище, оптимизированное для кэширования. В Node.js чаще всего используется библиотека memcached.

Установка и пример

npm install memcached
const Memcached = require('memcached');
const memcached = new Memcached('localhost:11211');

// Сохранение с TTL 60 секунд
memcached.set('api:weather', JSON.stringify({ temp: 22 }), 60, (err) => {
  if (err) console.error('Memcached set error:', err);
});

// Получение
memcached.get('api:weather', (err, data) => {
  if (data) {
    console.log('Cache hit:', JSON.parse(data));
  } else {
    console.log('Cache miss или                    

Рекомендаций