为什么redis会抛出“客户端已关闭” return Promise.reject(newErrors_1.ClientClosedError());错误?

问题描述 投票:0回答:2

我在docker环境中运行redis,以nodejs作为后端,postgres作为数据库,react作为前端。逻辑是从前端获取索引值,计算索引的斐波那契数并返回。服务器部分获取该值并将其发布。 Redis 被订阅并在服务器收到该值时获取该值。但是,每次redis收到该值时,都会显示错误。背后的原因是什么?

redis 代码。

const redis = require("redis");
const keys = require("./keys");

const redisClient = redis.createClient({
  // host: keys,
  // port: keys.redisPort,
  //  retry_strategy: () => 1000, if connection is lost, retry every sec
});

const subscriber = redisClient.duplicate();

const connectRedis = () => {
  subscriber
    .connect()
    .then(() => console.log("redis worker connected"))
    .catch((err) => console.log("err redis connection", err));
};

connectRedis();

subscriber.subscribe("insert", async (message) => {
  console.log({ message });
  const val = fib(parseInt(message));
  redisClient.hSet("values", message, JSON.stringify(val));
});

function fib(index) {
  if (!index) return;
  if (index < 2) return 1;

  return fib(index - 1) + fib(index - 2);
}

错误:

Error redis

node.js docker redis node-redis redis-cli
2个回答
0
投票

任何在学习了 Stephen Grider 的 Docker 课程后遇到这个问题的人,都可以使用 redis v3.1.2。较新的版本即 v4 在连接到 redis 时存在一些问题。

使用命令

npm i [email protected]

链接


0
投票

您可以使用以下示例来连接redis。

// docker-compose.yml

services:
  redis-server:
    image: "redis"
  node-app:
    build: .
    ports:
      - "5000:5000"

// index.js

const redisClient = createClient({
   url: "redis://redis-server:6379",
});

await redisClient.connect();

© www.soinside.com 2019 - 2024. All rights reserved.