无法使用 NodeJS 和 Redis 进行 SET/GET

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

我想为我的 Etherpad 编写一个 ueberDB Redis-Handler。

我绝对不明白我的问题,因为使用 PHP 我可以毫无问题地设置和获取键/值。它仅不适用于 NodeJS。

这是示例代码:

var redis = require("redis");
client = redis.createClient();
client.on("error", function (err) {
  console.log("Error " + err);
});

client.set("test", "string val", redis.print);
console.log(client.get("test"));

我做错了什么?也许有人给我一个建议。

node.js redis key-value etherpad
3个回答
8
投票

首先,你需要知道你的redis客户端是否已连接。您可以使用 console.log(client) 检查,您将看到一个名为“connected”的变量。你应该看到“true”

如果你想在节点中使用redis,你应该使用这样的东西

    client.set("test","val", function(err) {
        if (err) {
           // Something went wrong
           console.error("error");
        } else {
            client.get("test", function(err, value) {
                 if (err) {
                     console.error("error");
                 } else {
                     console.log("Worked: " + value);
                 }
            });
        }
    });

请记住,所有 Redis 功能都是异步的。


2
投票

如果从接受的答案中看不出来,则发布的代码失败的原因是由于异步性。

您在 set() 完成之前调用 get()。


0
投票

您似乎在使用 Node.js 和 Redis 设置和获取数据时遇到问题。根据所提供的信息,以下是一些潜在的解决方案:

  • 连接字符串:确保您的 Redis 数据库连接字符串正确并指向正确的数据库。当无法检索或存储数据时,这通常是一个常见问题。
  • 异步操作:Redis 中的 client.get() 和 client.set() 函数异步运行。这意味着操作可能并不总是按照调用的顺序完成。为了解决这个问题,您可以使用 Promises 或 async/await 来处理异步操作。这是使用 async/await 的示例:
app.get("/set", async (req, res, next) => {
  try {
    const data = req.query.p;
    await redisClient.set("test", data);
    res.status(200).json({
      message: "data cached",
      data: data,
    });
  } catch (err) {
    console.error(err);
    res.status(500).json({
      message: "Something went wrong",
    });
  }
});
  • 传统模式:如果您在Redis中使用传统模式,您可能需要使用回调而不是await来检索数据。这是一个例子:
redisClient.set('example', '01');
redisClient.get('example', (err, data) => {
  console.log(data); // data is '01'
});
  • 会话管理:如果您在 Express 中使用 Redis 进行会话管理,请确保您已正确配置会话中间件并连接到 Redis 客户端。这是一个例子:
const express = require('express');
const session = require('express-session');
const redis = require('redis');
const client = redis.createClient();
const redisStore = require('connect-redis')(session);

const app = express();
app.use(session({
  store: redisStore,
  // other session options
}));

client.on('connect', function (err) {
  if (err) {
    console.log('Could not establish a connection with Redis.');
  } else {
    console.log('Connected to Redis!');
  }
});

请记住将占位符代码替换为您的实际实现,并根据您的具体用例调整代码。

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