无法从 Express 连接到远程 Redis

Posted

技术标签:

【中文标题】无法从 Express 连接到远程 Redis【英文标题】:Cannot connect from Express to remote Redis 【发布时间】:2020-07-31 10:34:39 【问题描述】:

我在连接到远程 Redis 服务器时遇到问题。从我的本地客户端,当我从 cli 连接时,一切看起来都很好

redis-cli -h 192.168.80.236 ping
PONG

如果我尝试从简单的 Express 应用程序连接,我会不断收到以下错误

Redis PUBLISHER NodeJS application in port 3000
events.js:187
      throw er; // Unhandled 'error' event
      ^

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1128:14)
Emitted 'error' event on RedisClient instance at:
    at RedisClient.on_error (/Users/sriramk/Projects/Personal/Express/simpleredis/node_modules/redis/index.js:341:14)
    at Socket.<anonymous> (/Users/sriramk/Projects/Personal/Express/simpleredis/node_modules/redis/index.js:222:14)
    at Socket.emit (events.js:210:5)
    at emitErrorNT (internal/streams/destroy.js:92:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
    at processTicksAndRejections (internal/process/task_queues.js:80:21) 
  errno: 'ECONNREFUSED',
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 6379

让我感到困惑的是,Redis 连接到“localhost”,而它实际上应该连接到远程服务器。最初我的想法是,可能是一些导致连接问题的身份验证问题。但是如果redis-cli可以顺利连接,NodeJS有什么问题 完整代码可以在这个位置找到 - https://github.com/KrishnanSriram/simpleredis

非常感谢您的想法/建议。因为这个问题,我完全停止了

【问题讨论】:

192.168.80.236 不是 127.0.0.1:6379 可能将您的配置更改为 192.168.80.236 过去我在使用redis 库时遇到了一些问题,所以我现在只在本地使用ioredis... 我使用docker 来托管我的本地Redis 实例,我将它用作@987654329 @试一试 @marpme 你有机会研究 github 代码吗?我的 API 中没有 127.0.0.1 。如果你没有,这就是我所拥有的 redis.createClient(6379, '192.168.80.236'); @balexandre 这是一个好点。我没有尝试过ioredis,虽然我读过它。在这种情况下,我将 Redis 用于发布/订阅。我了解 ioredis 也支持 pub/sub。需要尝试找出 ioredis 有多少不同以及移植成本会有多高(从 redis 到 ioredis)。谢谢。非常感谢 【参考方案1】:

我查看了您的存储库并在您的 server.js 中看到您尝试两次实例化 redis 客户端。

曾经

const client = redis.createClient(); 

然后用

const publisher = redis.createClient(6379, '192.168.80.236');

删除const client = redis.createClient(); 应该可以解决问题,因为这会尝试连接到默认端口上的localhost

【讨论】:

优秀。新鲜的眼睛总是有帮助的。这就是结对编程很棒的原因。谢谢你的时间。修复了我的问题:)

以上是关于无法从 Express 连接到远程 Redis的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法从任何网络连接到 NodeJS express 服务器?

无法从 SSMS 连接到 SQL Server Express

无法从 Web 服务器连接到 SQL Server Express

Express.JS 服务器连接到远程网络上的主机

无法从 ASP.NET Web 应用程序连接到我的 SQL Server Express

无法连接到 NodeJS Express 服务器