Node.js调用Redis sadd方法写入Set类型时报TypeError错误
报错原因
TypeError: redisClient.sadd is not a function报错由两个问题共同导致:
- 你当前使用的是v4及以上版本的
node-redis客户端,该版本对所有Redis命令的API做了小驼峰命名规范调整,废弃了旧版本全小写缩写的方法名。Set类型添加元素的方法在v4版本中为sAdd(第二个单词首字母大写),不存在全小写的sadd方法。你操作String、List类型未报错,是因为这两类数据类型的部分方法名(比如set、get、lPush)刚好符合小驼峰规则,和你的调用写法匹配。 - 你当前的传参格式不符合v4版本的API要求:v4版本不需要把key和集合元素打包到同一个数组中作为第一个参数传入,正确传参格式为第一个参数传Set的key,第二个参数传需要添加的元素数组。同时v4版本原生返回Promise,优先使用async/await写法处理返回结果,不推荐传统回调写法。
修复方案
将原有sadd调用逻辑替换为符合v4版本API规范的写法即可,完整可运行代码如下:
// 注意提前初始化redisClient,替换为你实际的连接配置 // const redisClient = redis.createClient({ url: 'redis://127.0.0.1:6379' }) let redisConnect = async () => { redisClient.on('error', (err) => { console.log('Redis Client Error', err); }); redisClient.on('ready', () => console.log('Redis is ready')); await redisClient.connect(); // 正确调用sAdd方法,按参数要求传值 const addCount = await redisClient.sAdd('tags', ['angularjs', 'reactjs', 'nodejs']); console.log('成功添加的元素数量:', addCount); }; redisConnect();
补充说明
- v4版本所有Set类型相关方法均遵循小驼峰命名规则,比如查询集合所有元素用
sMembers、删除集合元素用sRem、判断元素是否存在用sIsMember,调用时注意不要写成全小写格式。 - 如果你使用的是v3及更早版本的
node-redis,不会出现该方法不存在的报错,但v3版本已停止官方维护,建议升级到v4版本后统一使用规范API。
内容的提问来源于stack exchange,提问作者Imari Childress
相关产品推荐
相关产品推荐

