我尝试使用 NodeJS 从 ECS 实例与 Redis Elasticache 进行通信,日志显示它已连接,但没有发生任何其他情况。
这是我正在运行的脚本:
const redis = require("redis");
(async () => {
try {
const client = redis.createClient({
url: "redis://demo-cache-123abc.serverless.use1.cache.amazonaws.com:6379",
});
client.on("connect", () => console.log("Redis Client Connected"));
client.on("ready", () => console.log("Redis Client is ready."));
client.on("end", () => console.log("Redis Client has ended."));
client.on("error", (err) => console.log("Redis Client Error", err));
client.on("reconnecting", (err) => console.log("Redis Client is reconnecting...", err));
console.log(`connecting...`);
await client.connect();
console.log(`connected!`);
await client.set("key", "value123");
const value = await client.get("key");
console.log("value", value);
await client.disconnect();
} catch (error) {
console.log("error:");
console.log(error);
}
})();
打印的日志是这样的:
connecting...
Redis Client Connected
然后它不会记录任何其他内容...没有错误。没有什么...
更奇怪的是该进程还在继续运行。如果我添加
setInterval(() => console.log(Date.now()), 3000)
那么日志每 3 秒打印一个新的时间戳。但我在 await client.connect();
行下面的代码永远不会执行。几乎就像承诺永远不会兑现......
从未记录任何错误。任务永远不会崩溃。它只是继续运行,并表示已连接,但从未与 Redis 交互。代码停止执行...
我什至不知道该问什么,除了我怎样才能让它工作?!我可以添加或删除或仔细检查哪些设置?
在 AWS 上,TLS 连接是强制性的(我没有找到关闭它的方法,而且我也不想这样做),所以我只需要添加一个简单的配置,上面的配置就开始工作。
const client = redis.createClient({
url: "redis://demo-cache-123abc.serverless.use1.cache.amazonaws.com:6379",
socket: {
tls: true,
},
});
大声喊出另一篇文章的答案:https://stackoverflow.com/a/75557575/4927236