适用于 Node.js 的 Redis 客户端:ioredis — 强大的 Redis 操作工具

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

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

开始课程

适用于 Node.js 的 Redis 客户端:ioredis



Redis 是一种高性能的内存数据存储,常被用作数据库、缓存和消息代理。在 Node.js 中与 Redis 交互有多种库可选,其中功能最强大且最流行的之一就是 ioredis。该库提供了完整、高效且便捷的 API 用于操作 Redis,支持所有现代特性,包括集群、发布/订阅、事务和 Lua 脚本。



本文将详细介绍 ioredis,包括其安装、主要功能,并提供基于 JavaScript (Node.js) 的实用代码示例。



安装与连接



通过 npm 或 yarn 安装 ioredis 非常简单:



npm install ioredis# 或yarn add ioredis


安装后,创建一个客户端实例:



const Redis = require('ioredis');const redis = new Redis(); // 默认连接 localhost:6379

// 或使用显式参数const redis = new Redis({ host: 'localhost', port: 6379, password: 'your_password', // 如果设置了密码 db: 0});


该库支持 Promise 和 async/await,使代码更简洁易读。



基本数据操作



ioredis 支持所有标准 Redis 命令。以下是对字符串、列表和哈希的操作示例。



字符串操作



async function stringExample() {  await redis.set('user:1:name', '阿列克谢');  const name = await redis.get('user:1:name');  console.log(name); // 阿列克谢

// 设置带过期时间 (TTL) await redis.setex('temp:code', 60, '123456'); // 存活 60 秒}


列表操作



async function listExample() {  await redis.lpush('queue:tasks', 'task1', 'task2');  await redis.rpush('queue:tasks', 'task3');  const tasks = await redis.lrange('queue:tasks', 0, -1);  console.log(tasks); // ['task2', 'task1', 'task3']}


哈希操作



async function hashExample() {  await redis.hset('user:1', {    name: '玛丽亚',    age: 28,    city: '莫斯科'  });  const age = await redis.hget('user:1', 'age');  console.log(age); // 28

const allData = await redis.hgetall('user:1'); console.log(allData); // { name: '玛丽亚', age: '28', city: '莫斯科' }}


发布/订阅 (Pub/Sub)



Redis 支持发布/订阅模式,ioredis 提供了便捷的接口。注意:订阅者需要使用独立的连接。



// 订阅者const subscriber = new Redis();subscriber.subscribe('news', 'updates', (err, count) => {  console.log(`已订阅 ${count} 个频道`);});

subscriber.on('message', (channel, message) => { console.log(`从 ${channel} 收到: ${message}`);});

// 发布者(可在另一个进程中)const publisher = new Redis();publisher.publish('news', '你好,世界!');publisher.publish('updates', '版本 2.0 已发布');


Redis 集群操作



ioredis 对集群有出色的支持。只需传入集群节点列表即可:



const cluster = new Redis.Cluster([  { host: 'node1.example.com', port: 6379 },  { host: 'node2.example.com', port: 6379 },  { host: 'node3.example.com', port: 6379 }]);

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


该库会自动处理节点间的命令重定向(MOVED、ASK)并支持槽位管理。



事务与管道



如需原子性地执行多条命令,请使用事务 (MULTI/EXEC)。如需提升性能,请使用管道 (pipeline)。



事务



async function transaction                    

推荐