You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Render部署Node.js应用时Redis连接被拒绝问题求助

问题:Render部署Node.js应用时Redis连接被拒绝(ECONNREFUSED 127.0.0.1:6379)

我在Render平台部署一个使用worker和队列处理任务的Node.js应用,尝试连接Redis实例时连接被拒绝,日志显示应用仍在尝试连接本地地址127.0.0.1:6379。

我的配置代码

config/redis.js

const redis = require('redis');

// Redis configuration options
const redisConfig = {
  url: 'redis://red-cjds7cavvtos73bpvvn0:6379',
  host: 'red-cjds7cavvtos73bpvvn0'
};
console.log('redis config started with redis url: ',redisConfig.url)
// Create a Redis client
const client = redis.createClient(redisConfig);
console.log("client added: ",client)
// Event listeners for Redis client
client.on('connect', () => {
  console.log('Connected to Redis');
});

client.on('error', (error) => {
  console.error('Error connecting to Redis:', error);
});
console.log('exporting the connection')

// Export the Redis client
module.exports = client;

根目录index.js导入代码

const express = require('express')
const app = express();
const redisConnection=require('./config/redis')
const path = require('path')
const port = 7000
const db = require('./config/mongoose')

部署日志错误信息

==> Using Node version 14.17.0 (default)
Aug 19 04:40:37 AM  ==> Docs on specifying a Node version: https://render.com/docs/node-version
Aug 19 04:40:37 AM  ==> Starting service with 'node index.js'
Aug 19 04:40:43 AM  redis config started with redis url:  redis://red-cjds7cavvtos73bpvvn0:6379
Aug 19 04:40:43 AM  client added:  Commander {
Aug 19 04:40:43 AM    _events: [Object: null prototype] {},
Aug 19 04:40:43 AM    _eventsCount: 0,
Aug 19 04:40:43 AM    _maxListeners: undefined,
Aug 19 04:40:43 AM    commandOptions: [Function: commandOptions],
Aug 19 04:40:43 AM    select: [AsyncFunction: SELECT],
Aug 19 04:40:43 AM    subscribe: [Function: SUBSCRIBE],
Aug 19 04:40:43 AM    unsubscribe: [Function: UNSUBSCRIBE],
Aug 19 04:40:43 AM    pSubscribe: [Function: PSUBSCRIBE],
Aug 19 04:40:43 AM    pUnsubscribe: [Function: PUNSUBSCRIBE],
Aug 19 04:40:43 AM    sSubscribe: [Function: SSUBSCRIBE],
Aug 19 04:40:43 AM    sUnsubscribe: [Function: SUNSUBSCRIBE],
Aug 19 04:40:43 AM    quit: [Function: QUIT],
Aug 19 04:40:43 AM    multi: [Function: MULTI],
Aug 19 04:40:43 AM    bf: {},
Aug 19 04:40:43 AM    cms: {},
Aug 19 04:40:43 AM    cf: {},
Aug 19 04:40:43 AM    tDigest: {},
Aug 19 04:40:43 AM    topK: {},
Aug 19 04:40:43 AM    graph: {},
Aug 19 04:40:43 AM    json: {},
Aug 19 04:40:43 AM    ft: {},
Aug 19 04:40:43 AM    ts: {},
Aug 19 04:40:43 AM    [Symbol(kCapture)]: false
Aug 19 04:40:43 AM  }
Aug 19 04:40:43 AM  exporting the connection
Aug 19 04:40:48 AM  server is ua and running on port: 7000
Aug 19 04:40:48 AM  events.js:353
Aug 19 04:40:48 AM        throw er; // Unhandled 'error' event
Aug 19 04:40:48 AM        ^
Aug 19 04:40:48 AM  
Aug 19 04:40:48 AM  Error: connect ECONNREFUSED 127.0.0.1:6379
Aug 19 04:40:48 AM      at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1146:16)
Aug 19 04:40:48 AM  Emitted 'error' event on Queue instance at:
Aug 19 04:40:48 AM      at RedisClient.<anonymous> (/opt/render/project/src/node_modules/kue/lib/redis.js:65:13)
Aug 19 04:40:48 AM      at RedisClient.emit (events.js:376:20)
Aug 19 04:40:48 AM      at RedisClient.on_error (/opt/render/project/src/node_modules/kue/node_modules/redis/index.js:401:14)
Aug 19 04:40:48 AM      at Socket.<anonymous> (/opt/render/project/src/node_modules/kue/node_modules/redis/index.js:279:14)
Aug 19 04:40:48 AM      at Socket.emit (events.js:376:20)
Aug 19 04:40:48 AM      at emitErrorNT (internal/streams/destroy.js:106:8)
Aug 19 04:40:48 AM      at emitErrorCloseNT (internal/streams/destroy.js:74:3)
Aug 19 04:40:48 AM      at processTicksAndRejections (internal/process/task_queues.js:82:21) {
Aug 19 04:40:48 AM    errno: -111,
Aug 19 04:40:48 AM    code: 'ECONNREFUSED',
Aug 19 04:40:48 AM    syscall: 'connect',
Aug 19 04:40:48 AM    address: '127.0.0.1',
Aug 19 04:40:48 AM    port: 6379
Aug 19 04:40:48 AM  }

我已尝试在连接配置中添加host,但仍无法正常连接,恳请帮助我建立Redis连接。


解决方案

问题根源

从错误日志的调用栈能看到,连接错误来自kue库内部的Redis客户端,而非你自己在redis.js中配置的客户端。kue默认会连接本地Redis服务(127.0.0.1:6379),所以即便你自己配置了正确的Redis实例,只要没给kue指定连接信息,它还是会走默认配置。

修复步骤

找到项目中初始化kue队列的代码,修改为指定Redis连接参数:

const kue = require('kue');

// 用你的Render Redis实例URL配置kue队列
const queue = kue.createQueue({
  redis: {
    url: 'redis://red-cjds7cavvtos73bpvvn0:6379'
  }
});

如果你的Render Redis实例需要密码验证,记得在URL中加入认证信息:

// 示例:带密码的Redis URL格式
const queue = kue.createQueue({
  redis: {
    url: 'redis://<用户名>:<密码>@red-cjds7cavvtos73bpvvn0:6379'
  }
});

额外检查(可选)

如果你使用的是redis库v4.x版本,你的redis.js配置需要手动调用connect()方法完成连接:

// 在redis.js中添加connect调用
const client = redis.createClient(redisConfig);
client.connect(); // v4版本需要手动触发连接

验证

重新部署应用后,查看日志如果不再出现127.0.0.1:6379的连接错误,而是显示连接到你的Redis实例地址,说明配置生效。


内容的提问来源于stack exchange,提问作者Himanshu Nain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:37:05