无法从 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的主要内容,如果未能解决你的问题,请参考以下文章