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) => Также в библиотеке
Конфигурация приложений Swift (iOS/macOS): лучшие практики и инструменты
Работа с изображениями в Go (Golang): библиотеки и примеры
Обработка изображений на C++: библиотеки CImg, OpenCV и stb_image
TypeBox для TypeScript: полное руководство с примерами