Redis клиент для Node.js: ioredis — полное руководство

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

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

Начать курс

Redis клиент для JavaScript (Node.js) — ioredis

Redis — это высокопроизводительное хранилище данных типа «ключ-значение», которое часто используется для кэширования, управления сессиями, очередей сообщений и Pub/Sub-систем. Для работы с Redis из Node.js существует несколько библиотек, но одной из самых мощных и популярных является ioredis. Эта библиотека предназначена для современных приложений, требующих высокой производительности, поддержки кластеризации, транзакций и потоковой обработки данных.

Что такое ioredis?

ioredis — это полнофункциональный Redis клиент для Node.js, написанный на JavaScript. Он поддерживает все возможности Redis, включая кластеризацию, Sentinel-режимы, конвейеризацию (pipelining), транзакции (MULTI/EXEC), Lua-скрипты, Pub/Sub, а также работу с MapReduce-подобными структурами. Библиотека активно развивается и используется в продакшене многими компаниями.

Установка ioredis

Установка производится через npm:

npm install ioredis

После установки вы можете подключиться к Redis серверу:

const Redis = require('ioredis');
const redis = new Redis(); // по умолчанию localhost:6379

Основные возможности ioredis

  • Простота использования — интуитивно понятный API, похожий на команды Redis.
  • Поддержка Promise и async/await — все асинхронные операции возвращают промисы.
  • Кластеризация — автоматическое распределение запросов между узлами кластера.
  • Sentinel — автоматическое переключение на резервный сервер при сбое.
  • Конвейеризация — отправка нескольких команд за один запрос для повышения производительности.
  • Pub/Sub — подписка на каналы и обмен сообщениями в реальном времени.
  • Поддержка Lua-скриптов — выполнение атомарных операций на стороне сервера.
  • Мониторинг и события — отслеживание состояния соединения и ошибок.

Примеры использования ioredis

Базовая работа с ключами

Пример установки и получения значения:

const Redis = require('ioredis');
const redis = new Redis();

async function basicExample() {
    await redis.set('user:1', 'Alice');
    const value = await redis.get('user:1');
    console.log(value); // Alice
}
basicExample();

Работа с хэшами

Хэши позволяют хранить несколько полей под одним ключом:

async function hashExample() {
    await redis.hset('user:2', 'name', 'Bob', 'age', 30);
    const name = await redis.hget('user:2', 'name');
    console.log(name); // Bob
}
hashExample();

Конвейеризация (Pipelining)

Конвейеризация значительно ускоряет выполнение множества команд:

async function pipelineExample() {
    const pipeline = redis.pipeline();
    pipeline.set('key1', 'value1');
    pipeline.set('key2', 'value2');
    pipeline.get('key1');
    const results = await pipeline.exec();
    console.log(results); // массив результатов
}
pipelineExample();

Pub/Sub (Издатель-Подписчик)

Пример подписки на канал и отправки сообщения:

const subscriber = new Redis();
const publisher = new Redis();

subscriber.subscribe('news', (err, count) => {
    console.log(`Подписан на ${count} канал(ов)`);
});

subscriber.on('message', (channel, message) => {
    console.log(`Получено сообщение из канала ${channel}: ${message}`);
});

// Публикация сообщения
async function publishMessage() {
    await publisher.publish('news', 'Привет, мир!');
}
publishMessage();

Работа с кластером Redis

Для подключения к кластеру используйте Redis.Cluster:

const Redis = require('ioredis');

const cluster = new Redis.Cluster([
    { host: '127.0.0.1', port: 7000 },
    { host: '127.0.0.1', port: 7001 },
    { host: '127.0.0.1', port: 7002 }
]);

async function clusterExample() {
    await cluster.set('foo', 'bar');
    const value = await cluster.get('foo');
    console.log(value); // bar
}
clusterExample();

Обработка ошибок и события

ioredis предоставляет удобные события для мониторинга:

const redis = new Redis();

redis.on('connect', () => console.log('Подключение установлено'));
redis.on('error', (err) => console.error('Ошибка:', err));
redis.on('close', () => console.log('Соединение закрыто'));
redis.on('reconnecting', (delay) =>                    

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