很好地连接到当地的Redis和通过官方的Redis码头形象。但是,当我切换到ENV变量的Heroku值时。它无法连接。
我也尝试过完整的url选项,但是当我需要将options对象作为第二个参数添加到new Redis()
时,这似乎不适用于任何Redis连接,如果我不为本地和官方的Redis图像传递任何选项,Url选项就能工作。
只向新的Redis()添加没有选项的heroku,看起来很有效,但是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;
发布于 2022-08-12 12:55:34
我不知道如何使用环境变量REDIS_HOST
、REDIS_PORT
、REDIS_PASSWORD
和REDIS_DB
。Redis 提供一个环境变量,该变量捕获所有这些的Heroku数据
在为Redis创建Heroku数据之后,将创建新版本并重新启动应用程序。应用程序配置中有一个
REDIS_URL
配置变量。它包含可用于访问Redis实例新配置的Heroku数据的URL。
const =需要量(“redis”);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
https://stackoverflow.com/questions/73334256
复制相似问题