Что такое Redis и как использовать его для кэширования запросов в Node.js

8 минут чтения
Средний рейтинг статьи — 4.6

Redis (Remote Dictionary Server) — это сверхбыстрая in-memory база данных, хранящая данные в оперативной памяти.
Она используется не как основное хранилище (как MySQL или MongoDB), а как кэш — промежуточный слой между приложением и базой данных, позволяющий ускорить доступ к часто запрашиваемой информации.

Redis поддерживает различные типы данных: строки, списки, хэши, множества, отсортированные множества и многое другое.
При этом основная особенность — мгновенная скорость. Так как данные лежат в оперативке, чтение и запись происходят за миллисекунды.

Зачем использовать Redis в Node.js

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

Решение — кэширование.
Приложение сначала проверяет, есть ли ответ в Redis.
Если да — возвращает его мгновенно.
Если нет — делает запрос в БД, сохраняет результат в Redis и отдаёт клиенту.

Это снижает нагрузку на БД и ускоряет ответы API в разы.

Установка Redis

На Ubuntu Redis устанавливается стандартно:

sudo apt update
sudo apt install redis-server -y

После установки можно проверить работу сервера:

sudo systemctl status redis

И протестировать его в интерактивном режиме:

redis-cli
127.0.0.1:6379> set test "Hello, Redis!"
OK
127.0.0.1:6379> get test
"Hello, Redis!"

Если видите ответ "Hello, Redis!" — всё работает.

Подключение Redis к Node.js

В Node.js Redis подключается через официальный пакет ioredis или redis (второй — официальный от разработчиков Redis).
Рассмотрим современный вариант:

npm install redis

Пример простого подключения:

import { createClient } from 'redis';
 
const client = createClient();
 
client.on('error', (err) => console.error('Redis error:', err));
 
await client.connect();
 
console.log('Connected to Redis!');

Теперь можно использовать Redis как кэш или хранилище.

Пример кэширования HTTP-запросов

Допустим, у нас есть Express-приложение, которое получает данные из внешнего API или базы данных.
Мы хотим закэшировать ответы на 60 секунд, чтобы при повторных запросах данные брал Redis.

import express from 'express';
import fetch from 'node-fetch';
import { createClient } from 'redis';
 
const app = express();
const redis = createClient();
await redis.connect();
 
// Middleware для проверки кэша
async function cache(req, res, next) {
    const key = `data:${req.path}`;
    const cached = await redis.get(key);
    if (cached) {
        console.log('Отдаём из кэша');
        return res.json(JSON.parse(cached));
    }
    next();
}
 
app.get('/users', cache, async (req, res) => {
    console.log('Делаем запрос к API...');
    const response = await fetch('https://jsonplaceholder.typicode.com/users');
    const data = await response.json();
 
    // Сохраняем в Redis на 60 секунд
    await redis.setEx('data:/users', 60, JSON.stringify(data));
 
    res.json(data);
});
 
app.listen(3000, () => console.log('Server started on http://localhost:3000'));

Теперь при первом запросе /users данные подтянутся с API,
а последующие 60 секунд ответы будут приходить из Redis мгновенно.

Установка TTL (времени жизни данных)

Redis умеет автоматически удалять устаревшие данные.
TTL задаётся при установке ключа с помощью команды SETEX или метода setEx() в Node.js.

await redis.setEx('user:42', 120, JSON.stringify(userData)); // живёт 120 секунд

Можно также изменить время жизни для существующего ключа:

expire user:42 60

Очистка кэша

Если нужно сбросить данные в кэше (например, после обновления данных в базе), можно просто удалить ключ:

await redis.del('data:/users');

Или полностью очистить все данные (аккуратно!):

redis-cli FLUSHALL

Полезные команды Redis

КомандаОписание
SET key valueУстановить значение
GET keyПолучить значение
DEL keyУдалить ключ
TTL keyУзнать оставшееся время жизни
EXPIRE key secondsЗадать время жизни
KEYS *Показать все ключи
FLUSHALLОчистить всё хранилище

Когда Redis особенно полезен

Redis активно используется для:

  • кэширования ответов API (например, частые запросы к каталогу товаров);
  • сессий пользователей (например, хранение JWT-токенов или данных авторизации);
  • очередей задач (через Redis Streams или BullMQ);
  • хранения временных данных (например, OTP-кодов или одноразовых ссылок).

Вывод

Redis — это мощный инструмент для ускорения работы приложений.
Используя его как кэш для Node.js, вы можете:

  • снизить нагрузку на базу данных;
  • ускорить отклик API в несколько раз;
  • хранить временные данные, сессии и результаты вычислений.

Благодаря простоте подключения и высокой скорости, Redis стал стандартом де-факто для кэширования и временных хранилищ в мире Node.js и микросервисов.

8 минут чтения
Средний рейтинг статьи — 4.6

Настроить мониторинг за 30 секунд

Надежные оповещения о даунтаймах. Без ложных срабатываний