簡體   English   中英

無法連接到 nodejs 中的 redis

[英]not able to connect to redis in nodejs

首先,細節:

節點版本:v16

使用 redislabs 雲(v6.2.3)

npm package redis 版本 4.0.3

這是代碼...

const redis = require("redis");
require("dotenv").config();

const client = redis.createClient({
  host: process.env.REDIS_URI,
  port: process.env.REDIS_PORT,
  password: process.env.REDIS_PASSWORD
});

client.on("connect", () => {
  console.log("Connected to our redis instance!");
  client.set("iAmAKey", "Value");
});

在運行時它不會 output 任何東西:( 並且只是在一段時間后退出。

任何幫助將不勝感激。 謝謝!

好吧,我現在讓它工作了。 將此添加為任何未來有相同問題的流浪者的參考。

所以社區建議改用 URL。

const redis = require("redis");
require("dotenv").config();

(async () => {
  const client = redis.createClient({
    url: `redis://default:${process.env.REDIS_PASSWORD}@${process.env.REDIS_URI}:${process.env.REDIS_PORT}`,
  });

  client.on("error", (err) => console.log("Redis Client Error", err));

  await client.connect();

  await client.set("key", "value");
  console.log("Redis Connected!")
  const value = await client.get("key");
  console.log(value);
})();

這是供將來參考的問題:無法連接到 redis-labs 雲 redis 服務器 #1892

.createClient的調用會創建一個客戶端,但實際上並未連接到 Redis。 所以連接事件永遠不會觸發。 節點 Redis 4.x 支持承諾,所以你真的根本不需要回調。 您可以通過以下方式完成相同的操作:

const redis = require("redis");
const client = redis.createClient();

await client.connect();
await client.set('foo', 'bar');
let foo = client.get('foo');

請注意,為了簡潔起見,我在示例代碼中刪除了dotenv的使用,只是讓它連接到localhost上的 Redis。

@Amresh 的附加信息這對我有用:

  url: `redis://${process.env.REDIS_PASSWORD}@${process.env.REDIS_URI}:${process.env.REDIS_PORT}`,

沒有默認字。

我在節點 14 中使用 Redis ^4.3.1遇到了同樣的問題。 將版本更改為^3.1.2對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM