Redis Node.js调用zadd报错:client.zadd is not a function
解决Redis Node.js客户端中
client.zadd is not a function错误 问题原因
你碰到的这个错误,是因为使用了Redis Node.js客户端v4.x版本——这个版本彻底重构了API,和v3.x及以下的旧版回调式API差异极大:
- 所有命令都改成了Promise风格,不再支持传入回调函数
ZADD这类有序集合命令的参数格式完全改变,且方法名改为小驼峰式的zAdd- 必须等客户端连接成功后才能执行命令,不能提前调用
解决步骤
1. 修正zAdd的调用格式
v4.x中zAdd需要传入包含分数和成员的对象数组,示例:
// 添加单个成员 await client.zAdd('myzset', [{ score: 1, value: 'one' }]); // 添加多个成员 await client.zAdd('myzset', [ { score: 2, value: 'two' }, { score: 3, value: 'three' } ]);
2. 确保连接成功后执行命令
不能在connect()的回调外直接调用命令,推荐用async/await简化异步流程,避免链式then的混乱。
3. 替换旧的回调式API
v4.x不再支持带回调参数的get、set调用,必须用await或者then()处理返回的Promise。
完整修正代码
import { createClient } from 'redis'; const client = createClient({ host: 'localhost', port: 32768, }); // 监听客户端错误 client.on('error', (err) => console.log('Redis客户端错误', err)); // 用async函数封装所有操作 async function operateRedis() { await client.connect(); console.log('连接成功'); // 执行set命令 await client.set('foo', 'no'); // 执行get命令并打印结果 const getResult = await client.get('foo'); console.log(getResult); // 执行zAdd命令 await client.zAdd('myzset', [{ score: 1, value: 'one' }]); console.log('zAdd执行完成'); // 按需关闭连接 // await client.disconnect(); } // 执行函数并捕获错误 operateRedis().catch(console.error);
备选方案(不推荐)
如果非要用旧版回调式API,可以回退到v3.x版本:
npm uninstall redis npm install redis@3
但官方已停止维护旧版本,性能和安全性都不如v4.x,不建议这么做。
内容的提问来源于stack exchange,提问作者Karunakaran
相关产品推荐
相关产品推荐

