我正在运行一个由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)
);