我在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);
}
错误:
任何在学习了 Stephen Grider 的 Docker 课程后遇到这个问题的人,都可以使用 redis v3.1.2。较新的版本即 v4 在连接到 redis 时存在一些问题。
使用命令
npm i [email protected]
您可以使用以下示例来连接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();