Redis 客户端 for JavaScript (Node.js) — ioredis
Redis 是一种高性能的键值存储数据库,常用于缓存、会话管理、消息队列和 Pub/Sub 系统。在 Node.js 中与 Redis 交互有多种库可供选择,其中功能最强大且最流行的之一是 ioredis。该库专为需要高性能、支持集群、事务和流式数据处理的现代应用而设计。
什么是 ioredis?
ioredis 是一个用 JavaScript 编写的、功能完备的 Redis 客户端 for Node.js。它支持 Redis 的所有功能,包括集群、Sentinel 模式、管道(pipelining)、事务(MULTI/EXEC)、Lua 脚本、Pub/Sub,以及类似 MapReduce 的结构。该库正在积极开发中,并被许多公司用于生产环境。
安装 ioredis
通过 npm 安装:
npm install ioredis安装后,您可以连接到 Redis 服务器:
const Redis = require('ioredis');const redis = new Redis(); // 默认 localhost:6379ioredis 的主要功能
- 易于使用 — 直观的 API,类似于 Redis 命令。
- 支持 Promise 和 async/await — 所有异步操作都返回 Promise。
- 集群支持 — 自动在集群节点之间分配请求。
- 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 =