在我的节点应用程序中,我使用redis DB来存储数据。虽然使用密钥获取存储的值但我没有得到预期的输出。
var redis=require('redis');
var client = redis.createClient();
var pageContent={a: "a", b: "b", c: "c"};
//client.set('A',pageContent);//here i'm setting the value
client.get('A',function(err,res){
if(!err){
Object.keys(res).forEach(function(k){
console.log('key is '+k + ' value is '+res[k]);
});
}
else{
console.log('error');
}
});
上面的代码没有给出存储的值。循环结果我得到以下错误
TypeError: Object.keys called on non-object
所以我尝试过res.toString();但我没有得到存储的值,我只得到[对象];
答案 0 :(得分:2)
问题是您尝试使用SET
保存对象。在redis中,SET
和GET
仅适用于字符串,因此返回[object Object]
的原因是,这是保存在redis中的字符串 - 对象的字符串表示形式。
您可以将对象序列化为例如JSON,保存时使用JSON.stringify
,阅读时使用JSON.parse
或,您可以将对象保存为redis哈希值,保存时使用HMSET
,{{3阅读时(或HGETALL
/ HGET
)。
编辑:但请注意,如果您决定使用redis哈希,则不能使用“嵌套”对象 - 即,您无法存储其中一个属性为数组的对象或另一个对象。也就是说,
{
a: 1,
b: 2
}
没关系,而
{
a: {
b: 2
}
}
不是。如果你有这样的对象,你需要另一个模型(在这种情况下,带有SET / GET的JSON可以很好地工作)。