【问题标题】:Redis Client ignoring configuration options set on it and trying to connect to default ip 127.0.01Redis 客户端忽略其上设置的配置选项并尝试连接到默认 ip 127.0.01
【发布时间】:2021-06-24 00:57:45
【问题描述】:

在 AWS 我使用 ElastiCache Redis 服务器并使用节点作为后端和“promise-redis”包

这就是我尝试连接到我的 redis 服务器端点的方式

client = redis.createClient({
        host: '**my redis primary endpoint**',
        port: 6379
    });

这工作了一段时间,但在添加了一些代码行之后与redis无关 它给了我这个错误

error: connect ECONNREFUSED 127.0.0.1:6379

它似乎试图连接到本地服务器并忽略了我给他的主机端点

当我将端口更改为 6300

之类的任何数字时

默认端口号也出现同样的错误

error: connect ECONNREFUSED 127.0.0.1:6379

我很困惑,请帮忙!!!!

【问题讨论】:

  • 主机和端口参数是否硬编码?如果没有,请尝试console.log 他们并检查实际值是什么..
  • 将“与redis无关的代码行”添加到您的问题中。这将有助于找到解决方案。

标签: node.js amazon-web-services redis elastic-cache


【解决方案1】:

这些“天才”在他们的库中改变了连接这样重要的事情,甚至没有给出好的警告。我已经对这样一个事实保持沉默,即当您的一百万个项目中的库已经编码时进行此类更改是犯罪行为。现在你需要像这样连接:

const client = redis.createClient({
  socket: {
    host,
    port
  },
  password
});

我建议你切换到ioredis库,有一个旧的api,只有客户端是通过新的Redis({old config})创建的

因为在这个旧库(“redis”)中,出于某种原因,它们现在需要异步 connect() 来实现某些功能,而没有真正解释为什么需要它、何时需要它以及何时不需要它。一半的代码对我有用,一半没有。 所以,最好用这个:

let Redis = require('ioredis');
  const client = new Redis({
  host: '***',
  port: ****,
  password: '****'
});

【讨论】:

    【解决方案2】:

    确保主机密钥包含协议部分“http://”

    client = redis.createClient({ 
        host: '192.168.45.34', // don't use host: 'http://192.168.45.34'
        port: 6379 
    });
    

    如果在主机密钥中包含协议,redis 客户端默认使用 localhost - 127.0.0.1

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 2015-08-20
      • 1970-01-01
      • 2018-09-12
      • 2019-12-30
      • 1970-01-01
      • 2021-02-26
      • 2019-07-27
      • 1970-01-01
      相关资源
      最近更新 更多