节点 Redis 在我的 windows 计算机上无法运行,即使服务器已启动并且 运行

Node Redis does not work on my windows computer even though the server is up and running

const express = require("express");
const redis = require("redis");
const app = express();

const client = redis.createClient({
  url: "redis://admin123@ec2-35-182-15-126.ca-central-1.compute.amazonaws.com",
});

client.on("connect", function () {
  console.log("redis connected");
  console.log(`connected ${redisClient.connected}`);
});

client.on("error", (err) => {
  console.log(err);
});

app.listen(process.env.PORT || 3000, () => {
  console.log("Node server started");
});

即使我已经通过使用 Redsmin 连接检查了 EC2 redis 实例,但上面的代码没有显示与 redis 服务器的任何连接。 hosting details in Redsmin

这是一件非常简单的事情,但是我得到的错误无法用谷歌搜索。

Node server started C:\Users\Sithira_105661\Desktop\Projects\Learning\Redis\node_modules@node-redis\client\dist\lib\client\index.js:387 return Promise.reject(new errors_1.ClientClosedError()); ^

ClientClosedError: 客户端已关闭 在 Commander._RedisClient_sendCommand(C:\Users\Sithira_105661\Desktop\Projects\Learning\Redis\node_modules@node-redis\client\dist\lib\client\index.js:387:31) 在 Commander.commandsExecutor(C:\Users\Sithira_105661\Desktop\Projects\Learning\Redis\node_modules@node-redis\client\dist\lib\client\index.js:160:154) 在 Commander.BaseClass。 [设定] (C:\Users\Sithira_105661\Desktop\Projects\Learning\Redis\node_modules@node-redis\client\dist\lib\commander.js:8:29) 在对象。 (C:\Users\Sithira_105661\Desktop\Projects\Learning\Redis\redis.js:19:8) 在 Module._compile(节点:internal/modules/cjs/loader:1101:14) 在 Object.Module._extensions..js(节点:internal/modules/cjs/loader:1153:10) 在 Module.load(节点:internal/modules/cjs/loader:981:32) 在 Function.Module._load(节点:internal/modules/cjs/loader:822:12) 在 Function.executeUserEntryPoint [作为 runMain](节点:internal/modules/run_main:81:12) 在节点:internal/main/run_main_module:17:47

帮助我理解问题。提前致谢。

请检查您的 ec2 redis 连接

    const client = redis.createClient({
       url: "redis://username:password@ec2_endpoint:port",
     });

连接字符串格式:redis[s]://[[username][:password]@][host][:port]

终于找到解决办法了。我使用的是 node-redis 3.0.0 而不是 4,代码运行良好。我不知道为什么它在最新的 node-redis 中不起作用。如果你们中有人遇到这个问题,请使用 node-redis 3

我使用的是 node-redis 3.1.2 而不是 4,代码工作正常。

您使用的是非常旧版本的 Redis,一个被 Microsoft 废弃的名为 OpenTech Redis 的项目。

我建议您查看 Memurai。 Memurai 是 Redis 的最新本地 Windows 端口,派生自该项目(参见 this commit)。

Memurai 还提供免费的开发者版。

免责声明:我在 Memurai 工作。

如果你使用的是redis ^4.0.0,你可以这样做:

const { createClient } = require('redis');
const { REDIS_HOST_URL } = require('../config');

const client = createClient({ url: REDIS_HOST_URL });

(async () => {
    await client.connect();
})();

client.on('connect', () => console.log('::> Redis Client Connected'));
client.on('error', (err) => console.log('<:: Redis Client Error', err));

您可以在他们的文档中阅读更多内容 here

我认为我们不应该将版本从 4 降低到 3。

我们可以使用-

const redis = require('redis');

const client = redis.createClient();

   
(async () => {
    await client.connect();
})();

client.on('connect', () => console.log('Redis Client Connected'));
client.on('error', (err) => console.log('Redis Client Connection Error', err));

在 4.0.1 版本中,我们必须将 .connect() 添加到 运行 redis.

他们有migration guide

这是我的代码,但似乎效果不佳。

async function connectRedis(){

    try {

        const redisURL = '<link-redis-provider>';

        const client = createClient({
           url: redisURL
        });

        await client.connect();
        console.log('Cache is ready');

    } catch (error) {
       console.log('Connect to cache is failed')
    }
}
module.exports = {connectRedis}
const redis = require('redis');
const client = redis.createClient({
    host: '<hostname>',
    port: <port>,
    password: '<password>'
});

client.on('error', err => {
    console.log('Error ' + err);
});

您可以在此处阅读详细信息 https://docs.redis.com/latest/rs/references/client_references/client_nodejs/

更改版本 3.1.2

  1. 删除 node_modules 和 package-lock
  2. 打开package.json
  3. 编辑redis为3.1.2版本并保存
  4. 运行 npm 安装

如果你只想直接安装:

npm i redis@3.1.2