Node.js中调用Redis的set、get方法无输出,求故障原因
问题原因及解决办法
核心原因
你的代码问题主要出在Redis客户端版本不兼容以及错误未捕获这两点:
- 若使用的是Redis官方客户端
@redis/clientv4及以上版本,它已全面切换为Promise/async-await风格API,传统的回调写法(如client.set(key, value, callback))不再被支持,导致set和get的回调根本不会执行,自然看不到后续输出。 - 代码里的回调没有处理错误参数
err,就算有错误发生(比如权限问题、键操作失败),你也看不到任何提示,无法排查问题。
修正后的代码示例
方式1:使用async-await(推荐)
const redis = require('@redis/client'); const consola = require('consola'); async function runRedis() { const client = redis.createClient({ host: '你的host地址', port: 你的端口号 }); // 监听错误,避免静默失败 client.on('error', (err) => consola.error('Redis客户端错误:', err)); await client.connect(); consola.success('Connected!'); try { await client.set('framework', 'ReactJS'); const value = await client.get('framework'); console.log('value', value); // 操作完成后可按需关闭连接 await client.quit(); } catch (err) { consola.error('操作失败:', err); } } runRedis();
方式2:兼容回调(仅适合旧版本客户端)
如果坚持用回调,需确保安装的是旧版本Redis客户端(如redis v3.x),同时补充错误处理:
const redis = require('redis'); const consola = require('consola'); const client = redis.createClient(你的端口号, '你的host地址'); client.on('connect', function() { consola.success('Connected!'); client.set('framework', 'ReactJS', function(err, reply) { if (err) { return consola.error('Set操作失败:', err); } client.get('framework', function(err, value) { if (err) { return consola.error('Get操作失败:', err); } console.log('value', value); }) }) }); client.on('error', (err) => consola.error('Redis客户端错误:', err));
额外注意点
- 务必监听
error事件,Redis客户端的错误若不处理,会导致进程崩溃或静默失败,你完全无法知晓问题所在。 - 新版本客户端的
createClient参数格式已变更,需传入配置对象而非单独的port和host参数。
内容的提问来源于stack exchange,提问作者chenguang
相关产品推荐
相关产品推荐

