无法从节点服务器连接到Heroku Redis



在本地和通过Redis官方Docker镜像连接Redis时效果良好。但是,当我切换到ENV变量的Heroku Redis值时。无法连接。

我也尝试过完整的url选项,但当我需要将options对象作为第二个参数添加到new Redis()时,这似乎对任何Redis连接都不起作用,如果我不只为本地和官方Redis Docker映像传递任何选项,url选项就会起作用。

在新的redis((中只添加没有选项的heroku redis URI,看起来很有效,但10秒后我得到了Redis Connection Failure

Heroku Redis是否需要一些额外的准备步骤?

import Redis, { RedisOptions } from 'ioredis';
import logger from '../logger';
const REDIS_HOST = process.env.REDIS_HOST || '127.0.0.1';
const REDIS_PORT = Number(process.env.REDIS_PORT) || 6379;
const REDIS_PASSWORD = process.env.REDIS_PASSWORD;
const REDIS_DB = Number(process.env.REDIS_DB) || 0;
const redisConfig: RedisOptions = {
host: REDIS_HOST,
port: Number(REDIS_PORT),
password: REDIS_PASSWORD,
db: Number(REDIS_DB),
retryStrategy: function (times) {
if (times % 4 == 0) {
logger.error('Redis reconnect exhausted after 4 retries');
return null;
}
return 200;
},
};
const redis = new Redis(redisConfig);
redis.on('error', function () {
logger.error('Redis Connection Failure');
});
export default redis;

我不确定您是从哪里得到使用名为REDIS_HOSTREDIS_PORTREDIS_PASSWORDREDIS_DB的环境变量的想法的。Heroku Data for Redis提供了一个单一的环境变量来捕捉所有这些:

创建用于Redis的Heroku数据后,将创建新版本并重新启动应用程序。REDIS_URL配置变量在应用程序配置中可用。它包含可用于访问新提供的Heroku Data for Redis实例的URL。

下面是他们如何从Node.js:连接的示例

const redis = require("redis");
const client = redis.createClient({
url: process.env.REDIS_URL,  
socket: {
tls: true,
rejectUnauthorized: false
}
});

因此,相应地更改您的配置对象:

const REDIS_URL = process.env.REDIS_URL;
const redisConfig: RedisOptions = {
url: REDIS_URL,              // <--
socket: {                    // <--
tls: true,                 // <--
rejectUnauthorized: false  // <--
},                           // <--
retryStrategy: function (times) {
if (times % 4 == 0) {
logger.error('Redis reconnect exhausted after 4 retries');
return null;
}
return 200;
},
};

您已经在本地使用环境变量来设置Redis密码。将其替换为包含所有默认值的适当REDIS_URL,例如:

REDIS_URL=redis://user:password@host:port/database

相关内容

  • 没有找到相关文章

最新更新