我正在运行一个由node.js支持的简单网络应用程序,我尝试使用redis来存储一些 key 对Json对象,并将数据存储到redis中,因为我在“redis-cli”控制台上验证了这一点。但是当我尝试获取数据时,它总是返回 false 事件,没有错误。

我所做的就是在命令行上运行“node index.js”,这是我的index.js的前几行:

const getRedisClient = () => { 
  client = redis.createClient(REDIS["PORT"], REDIS["HOST"]); 
  client.on("error", function(err) { 
    console.log("Redis Error " + err); 
  }); 
  return client; 
} 
 
const getPostByLocalDbPath = (local_db_path, user_id) => { 
  try { 
    let client = getRedisClient(); 
    console.log("---- cache keys -----"); 
    console.log(user_id, local_db_path); 
    let data = client.hget(user_id, local_db_path, function (err, obj) { 
      if(err) { 
        return null; 
      } 
      return obj; 
    }); 
    console.log("--- cache data ---", data); 
    return data; 
  } catch (err) { 
    console.log("--- cache get exception ---", err); 
    return {}; 
  } 
} 

当我调用“getPostByLocalDbPath”方法时,它返回 false 而不是我存储在 Redis 缓存中的数据。

当我运行时

HGET 87 bdre2eb7-38b3-11e9-b66c-0af14c44c62s

在 redis-cli 控制台上运行命令,然后我可以看到该键的数据

请您参考如下方法:

您可以使用 Promisify:

var redis = require("redis"); 
 
const getRedisClient = () => { 
  cl = redis.createClient(); 
  cl.on("error", function(err) { 
    console.log("Redis Error " + err); 
  }); 
  return cl; 
} 
 
let client = getRedisClient(); 
const {promisify} = require('util'); 
const hgetAsync = promisify(client.hget).bind(client); 
 
async function getPostByLocalDbPath(local_db_path, user_id){ 
    console.log("---- cache keys -----"); 
    console.log(user_id, local_db_path); 
    let data = await hgetAsync(user_id, local_db_path); 
    console.log("--- cache data ---", data); 
    return data; 
} 
 
getPostByLocalDbPath('bdre2eb7-38b3-11e9-b66c-0af14c44c62s', '87').then( 
    val=>console.log(val) 
); 


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!