TypeScript 的 Redis 客户端:ioredis 和 redis

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

TypeScript 的 Redis 客户端:ioredis 和 redis



Redis 是一种高性能的内存数据存储,常用于缓存、会话管理、消息队列和实时应用。在使用 TypeScript 开发时(尤其是在 Node.js 环境中),您需要一个可靠的客户端来与 Redis 交互。目前,两个主要候选库是 redis(Redis 官方库)和 ioredis(流行的第三方替代方案)。两者都原生支持 TypeScript,但在 API、性能和附加功能上有所不同。



1. ioredis 库



ioredis 是一个用 TypeScript 编写的、功能齐全的 Node.js Redis 客户端。由于其可靠性、对集群和 Sentinel 的支持以及内置的数据流处理能力,它被认为是社区中的事实标准。



安装

npm install ioredis# 或yarn add ioredis


连接与基本示例

import Redis from 'ioredis';

const redis = new Redis({ host: 'localhost', port: 6379, // password: 'your-password', // 如果需要 retryStrategy: (times) => { // 重连策略 return Math.min(times * 50, 2000); }});

redis.on('connect', () => { console.log('已连接到 Redis');});

redis.on('error', (err) => { console.error('Redis 错误:', err);});

// 使用 async/awaitasync function demo() { await redis.set('user:1', JSON.stringify({ name: '伊万', age: 30 })); const user = await redis.get('user:1'); console.log('获取的数据:', JSON.parse(user));}

demo();


ioredis 特性

  • 完全支持 TypeScript — 所有方法都有严格的类型定义,使 IDE 能够提示参数和结果的类型。
  • 集群和 Sentinel — 内置支持 Redis 集群模式,并在故障时自动切换。
  • 流处理 — 为 Redis Streams 提供便捷接口(XADD、XREAD、XGROUP)。
  • 频道(Pub/Sub) — 轻松订阅频道并实时接收消息。
  • 管道和事务 — 将命令分组以提高性能。
  • 自动重连 — 内置重试策略。


管道示例

import Redis from 'ioredis';

const redis = new Redis();

async function pipelineDemo() { const pipeline = redis.pipeline(); pipeline.set('key1', 'value1'); pipeline.set('key2', 'value2'); pipeline.get('key1'); pipeline.get('key2');

const results = await pipeline.exec(); console.log('管道结果:', results); // [ [ null, 'OK' ], [ null, 'OK' ], [ null, 'value1' ], [ null, 'value2' ] ]}

pipelineDemo();


2. 官方 redis 库



从 4.x 版本开始,官方 redis 客户端已完全用 TypeScript 重写。它提供了基于 Promise 的现代 API、模块化架构以及与 TypeScript 的深度集成。



安装

npm install redis# 或yarn add redis


连接与示例

import { createClient } from 'redis';

const client = createClient({ url: 'redis://localhost:6379' // 或带密码: 'redis://user:password@localhost:6379'});

client.on('error', (err) => console.error('Redis 客户端错误', err));

async function connectAndUse() { await client.connect(); console.log('已连接!');

await client.set('session:123', 'active'); const status = await client.get('session:123'); console.log('会话状态:', status); // 'active'

await client.disconnect();}

connectAndUse();

推荐