无法连接到远程Redis主机[nodeJS]。

6
const redis = require('redis');
require('dotenv').config();
console.log(process.env.redisHost, ':', process.env.redisPort);
const redisClient = redis.createClient({
    host: process.env.redisHost,
    port: process.env.redisPort,
    password: process.env.redisKey
});
redisClient.connect();
redisClient.on('error', err => console.log('Redis error: ', err.message));
redisClient.on('connect', () => console.log('Connected to redis server'));
module.exports = redisClient;

我尝试了redis文档中的示例,但仍然收到错误信息: Redis error: connect ECONNREFUSED 127.0.0.1:6379 我将环境主机和端口变量记录到控制台上,得到了远程主机IPv4地址,但客户端仍然试图连接到本地主机而不是远程主机(我故意卸载了本地设备上的redis以检查客户端是否按照预期工作)。我还确认了远程redis主机的正常工作。
我还尝试了不同的方法,例如: https://cloud.google.com/community/tutorials/nodejs-redis-on-appengine
redis.createClient(port, host, {auth_pass: password});

但是,我仍然遇到了相同的错误。

我可以通过命令行连接到Redis主机:

redis-cli.exe -h XX.XX.XX.XXX -a Password
XX.XX.XX.XXX:6379> set name dhruv
OK
XX.XX.XX.XXX:6379> get name
"dhruv"
XX.XX.XX.XXX:6379> exit

我第一次尝试在Node.js上使用Redis,所以没有太清晰的想法,但我认为我做得没错。

如果有任何解决方案或变通方法都会非常有帮助:D

4个回答

12

使用以下代码可以正常工作:

const url = `redis://${process.env.redisHost}:${process.env.redisPort}`;
const redisClient = redis.createClient({
    url,
    password: process.env.redisKey
});
redisClient.connect();

1

Redis v4 中的配置对象已更改,您可以在此处查看新选项。以下是我在项目中的配置方式。

const redisClient = redis.createClient({ socket: { port: process.env.redisPort, host: process.env.redisHost }  })
redisClient.connect()

0

你能检查一下目标端口是否可达吗?可能是防火墙阻止了你的访问。


是的,我甚至可以从我的设备远程使用它。 但问题是Redis客户端甚至没有尝试连接到远程主机。它正在尝试连接到127.0.0.1而不是远程IP地址。 - Dhruv
通常Redis从配置文件中获取IP地址,请将Redis配置更改为config file installdir/redis/etc/redis.conf。 - mmantach
另一个建议是尝试使用Docker来连接Redis。 - mmantach
仍然无法通过这种方式连接到redis :/。我不明白的是,为什么即使我在函数中添加了远程主机IP,我的客户端也尝试连接到本地主机而不是远程主机!! - Dhruv
你是指使用正则表达式吗? const match = /^(?!0)(?!.*.$)((1?\d?\d|25[0-5]|2[0-4]\d)(.|$)){4}$/; console.log(match.test(process.env.redisHost)); 对于这个,我得到了true。 - Dhruv
显示剩余5条评论

0
如果你想在Express Node.js应用程序中连接到远程Redis数据库,你需要像这样传递URL:
const url = `rediss://default:your_password@your_host:your_port`;
const client = redis.createClient({
    url,
});

请注意,您的主机应该以类似于 private-db-redis-nyc3... 或 db-redis... 的形式开头,如果您发现 redis:// ,请不要包含它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接