Am正在尝试使用ioredis
从nodeJS
连接redis sentinel
实例。尽管尝试了多种可用选项,但我无法连接redis sentinel实例。我们尚未配置哨兵密码。但是,能够使用StackExchange.Redis
从.net core
连接相同的redis sentinel实例。请在下面找到nodeJS
代码,
import { AppModule } from './app.module';
import IORedis from 'ioredis';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const ioredis = new IORedis({
sentinels: [
{ host: 'sentinel-host-1' },
{ host: 'sentinel-host-2' },
{ host: 'sentinel-host-3' },
],
name: 'mastername',
password: 'password',
showFriendlyErrorStack: true,
});
try {
ioredis.set('foo', 'bar');
} catch (exception) {
console.log(exception);
}
await app.listen(3000);
}
bootstrap();
我们得到的错误是,
[ioredis] Unhandled error event: Error: connect ETIMEDOUT
node_modulesioredisbuiltredisindex.js:317:37)
at Object.onceWrapper (node:events:475:28)
at Socket.emit (node:events:369:20)
at Socket._onTimeout (node:net:481:8)
at listOnTimeout (node:internal/timers:557:17)
at processTimers (node:internal/timers:500:7)
.net core
中使用的连接字符串如下,
Redis_Configuration = "host-1,host-2,host-3,serviceName=mastername,password=password,abortConnect=False,connectTimeout=1000,responseTimeout=1000";
为了他人的利益而回答这个问题。一切都很好,但这个nodeJS
包正在将redis
实例解析为我无法从本地访问的私有IP。所以,必须把它放在子网组上,让它工作。然而,FYI-.net core
包不能解析为私有IP,因此我可以从本地访问实例。
"传递给构造函数的参数与用于连接到单个节点的参数不同;
尝试用sentinelPassword
替换password
。