【问题标题】:Unable to GET value from redis无法从 redis 获取值
【发布时间】:2020-12-24 16:54:47
【问题描述】:

我正在尝试从我设置的 redis 中获取一个值。当我调用 checkCache 函数时,我得到“CACHE:null”,然后它记录“NO ERROR + the data”。我不明白为什么,因为我使用了 await。

const redis = require("redis");
const client = redis.createClient({
  port      : procces.env.PORT,
  host      : procces.env.HOST,
  password  : procces.env.PASSWORD,
});

const checkCache = async (key) => {
  await client.get(key, (err, data) => {
    if(err) throw err;
    console.log("NO ERROR + " + data);
    if(data !== null) { return JSON.parse(data); }
  });
  return null;
};

我这样称呼方法:

const findAll = async(user) => {
  const cache = await checkCache(user);
  console.log('CACHE: ' + cache);  // returns null
};

【问题讨论】:

    标签: javascript node.js caching redis


    【解决方案1】:

    模块 redis 不支持 Promise。

    为此你已经答应了

    const Promise = require('bluebird');
    const redis = Promise.promisifyAll(require("redis"));
    

    编辑:

    const Promise = require('bluebird');
    const redis = Promise.promisifyAll(require("redis"));
    const client = redis.createClient({
      port      : process.env.PORT,
      host      : process.env.HOST,
      password  : process.env.PASSWORD,
    });
    
    const checkCache = async (key) => {
      const data = await client.getAsync(key);
        console.log("NO ERROR + " + data);
        if(data !== null) { return JSON.parse(data); }
      return null;
    };
    

    【讨论】:

    • 我试过了,但它仍然返回 null,然后返回“NO ERROR + the data”
    • @r10lomo 这是返回键的值。上面的代码我试过了。
    • 它像其他不需要蓝鸟的软件包一样有效吗?我尝试了 redisio,但它不起作用编辑:对不起,我一开始没有看到 getAsync。
    • @r10lomo 如果你不想使用 bluebird,你可以使用 promisifyAll = require('util-promisifyall') 来承诺所有
    猜你喜欢
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多