Redis клиент для TypeScript: ioredis и redis (node-redis)
В мире современных веб-приложений и микросервисов Redis является одним из самых популярных хранилищ данных в оперативной памяти. Он используется для кэширования, управления сессиями, очередей задач, Pub/Sub и многого другого. Если вы разрабатываете на TypeScript, вам понадобится надёжный клиент для взаимодействия с Redis. В этой статье мы рассмотрим два основных варианта: ioredis и redis (также известный как node-redis). Обе библиотеки имеют отличную поддержку TypeScript, активно поддерживаются и предоставляют широкий спектр возможностей.
Зачем нужен Redis клиент для TypeScript?
TypeScript добавляет статическую типизацию в JavaScript, что делает код более предсказуемым и уменьшает количество ошибок на этапе разработки. Redis клиент для TypeScript позволяет:
- Работать с Redis командами с полной поддержкой типов.
- Использовать автодополнение в IDE (IntelliSense).
- Легко интегрироваться с современными фреймворками (NestJS, Express, Koa).
- Упростить обработку ошибок и повторные подключения.
Библиотека ioredis
ioredis — это полнофункциональный Redis клиент, который долгое время был стандартом де-факто в Node.js экосистеме. Он поддерживает кластеризацию, Pub/Sub, конвейеризацию (pipelining), транзакции (MULTI/EXEC), автоматическое переподключение и многое другое. ioredis написан на TypeScript и предоставляет типы из коробки.
Установка
npm install ioredis
npm install @types/ioredis # если вы используете TypeScript < 4.0
Пример подключения и базовых операций
import Redis from 'ioredis';
// Создаём подключение к Redis (по умолчанию localhost:6379)
const redis = new Redis();
// Асинхронная функция для демонстрации
async function demo() {
try {
// Установка значения
await redis.set('user:1:name', 'Анна');
await redis.set('user:1:age', 30);
// Получение значения
const name = await redis.get('user:1:name');
console.log('Имя пользователя:', name);
// Работа с хешами
await redis.hset('user:2', 'name', 'Иван', 'age', 25);
const user2 = await redis.hgetall('user:2');
console.log('Пользователь 2:', user2);
// Инкремент
const views = await redis.incr('page:home:views');
console.log('Просмотры страницы:', views);
// Установка с истечением времени (TTL)
await redis.setex('temp:code', 60, '123456');
const ttl = await redis.ttl('temp:code');
console.log('Оставшееся время жизни ключа:', ttl, 'сек');
} catch (error) {
console.error('Ошибка Redis:', error);
} finally {
// Закрываем соединение
redis.disconnect();
}
}
demo();
Поддержка кластеров и Pub/Sub
ioredis отлично работает с Redis кластерами. Для этого используется специальный класс Cluster:
import Redis from '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 }
]);
await cluster.set('foo', 'bar');
const value = await cluster.get('foo');
console.log(value); // 'bar'
Для Pub/Sub используется отдельное подключение, так как подписчик не может выполнять обычные команды:
import Redis from 'ioredis';
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}`);
});
// Публикация сообщения
publisher.publish('news', 'Привет из TypeScript!');
Библиотека redis (node-redis)
redis (пакет redis на npm) — это официальный клиент от Redis. Начиная с версии 4.0, он был полностью переписан на TypeScript и получил современный API с промисами, поддержку модулей Redis (Redis Stack) и улучшенную производительность. Это рекомендуемый выбор для новых проектов.
Установка
npm install redis
Типы уже встроены, дополнительно устанавливать ничего не нужно.
Пример подключения и базовых операций
import { createClient } from 'redis';
// Создаём клиента
const client = createClient({
url: 'redis://localhost: Также в библиотеке
Echo для Go: полное руководство с примерами
Авторизация и аутентификация в JavaScript (Node.js): полное руководство
GraphQL в PHP: библиотека webonyx/graphql-php для создания API
Миграции баз данных в Swift: инструменты и подходы для iOS/macOS