Nodejs Redis createClient() 函数

Posted

技术标签:

【中文标题】Nodejs Redis createClient() 函数【英文标题】:Nodejs Redis createClient() function 【发布时间】:2020-03-10 06:38:17 【问题描述】:

谁能解决这个问题?我是 node.js 和 redis 初学者。

函数createClient() 可以接受两个参数:端口和主机。但我仍然被这个问题困扰。

var client = redis.createClient(); 

client.on('connect', function()
    console.log('Redis client connected');
);

错误:Redis 连接到 127.0.0.1:6379 失败 - 连接 ECONNREFUSED 127.0.0.1:6379 C:\Users\my-pc\Desktop\FINAL>节点索引 events.js:187 投掷者; // 未处理的“错误”事件 ^

错误:Redis 连接到 127.0.0.1:6379 失败 - 连接 ECONNREFUSED 127.0.0.1:6379 在 TCPConnectWrap.afterConnect [as oncomplete] (net.js:1128:14) 在 RedisClient 实例上发出“错误”事件: 在 RedisClient.on_error (C:\Users\my-pc\Desktop\FINAL\node_modules\redis\index.js:406:14) 在套接字。 (C:\Users\my-pc\Desktop\FINAL\node_modules\redis\index.js:279:14) 在 Socket.emit (events.js:210:5) 在 emitErrorNT (internal/streams/destroy.js:92:8) 在 emitErrorAndCloseNT (internal/streams/destroy.js:60:3) 在 processTicksAndRejections (internal/process/task_queues.js:80:21) errno: 'ECONNREFUSED', 代码:'ECONNREFUSED',系统调用:'connect',地址:'127.0.0.1', 端口:6379

【问题讨论】:

真正的问题是什么? Redis 仅在端口 6379 上配置。即使在我的 index.js 文件中,应用程序侦听端口 6379 仍然会导致此问题。 你的redis服务在运行吗? 【参考方案1】:

每当我开始使用 docker 多个本地容器时,这是一个非常常见但简单的问题。

你看,你已经创建了一个节点应用程序和一个redis服务器,但是两者是分开的,你没有在它们之间建立任何通信,这就是你面临这类问题的原因。

现在,首先您必须在节点应用程序和 redis-server 之间建立连接,以便它们之间可以进行通信。

为此,只需按照说明进行操作,希望这能解决您的问题。

第 1 步:为了在多个本地容器之间建立连接,您有两种选择,

* Use docker CLI's networking features.
* Or, simply use docker-compose to solve the issue, i prefer docker-compose and i will show how to do this using docker-compose.

Docker-compose:Compose 是一个用于定义和运行多容器 docker 应用程序的工具。 Overview of docker-compose

第二步:在你的项目目录下创建一个 docker-compose .yml 文件,命名为“docker-compose.yml”

步骤 3:在“docker-compose.yml”文件中编写以下代码:

version: "2.0"
services: 
  redis-server: 
    image: "redis"
  node-app: 
    build: .
    ports: 
      - "8080:8080"

第 4 步:在你的 redis.createClient() 函数中,只需在 index.js 文件中传递你的主机和端口参数

const client = redis.createClient(
    host: "redis-server",
    port: 6379
);

第 5 步:使用 docker-compose CLI 中的 docker-compose 构建和运行 docker 容器

docker-compose up --build

第 6 步:最后,打开浏览器并点击以下 URL:

localhost:8080

【讨论】:

OP 没有提及任何关于 Docker 的内容,因此该问题不太可能与 Docker 有关。【参考方案2】:

根据错误代码“ECONNREFUSED”,您确定在尝试连接客户端之前实际上是在 localhost 和端口 6379 上运行 redis 服务器吗?

【讨论】:

我忘记打开服务器了。 现在一切正常。【参考方案3】:

仅供参考(我今晚输了)

这不起作用(它默认连接到 localhost:6379 无论你在 url 中输入什么):

const redisURL = "redis://foo.bar.org:6379"
redis.createClient( redisURL )

但这确实有效

redis.createClient( url: redisURL )

希望我节省了您的时间。

【讨论】:

以上是关于Nodejs Redis createClient() 函数的主要内容,如果未能解决你的问题,请参考以下文章

nodejs总结之redis模块

nodejs使用redis

使用redis实现nodejs并发服务

如何(重新)在 nodejs/express 中使用 redis 客户端连接?

一个客户端的 Redis WATCH MULTI EXEC

数组为空,for循环后未添加数据