Что такое Redis и как использовать его для кэширования запросов в Node.js
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 и микросервисов.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний