节点 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.
这是我的代码,但似乎效果不佳。
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
- 删除 node_modules 和 package-lock
- 打开package.json
- 编辑redis为3.1.2版本并保存
- 运行 npm 安装
如果你只想直接安装:
npm i redis@3.1.2
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.
这是我的代码,但似乎效果不佳。
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
- 删除 node_modules 和 package-lock
- 打开package.json
- 编辑redis为3.1.2版本并保存
- 运行 npm 安装
如果你只想直接安装:
npm i redis@3.1.2