2013-05-29 25 views
0

在我的节点应用程序中,我使用redis DB来存储数据。使用键获取存储值时,我没有得到预期的输出。在redis中如何获取特定键的值?

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'); 
    } 
}); 

上面的代码是不给存储value.While循环,我发现了以下错误

TypeError: Object.keys called on non-object 

这就是我一直res.toString()的结果;但我没有得到存储的价值instaed,我只得到[对象对象];

+0

您只能使用'SET'存储字符串。因此,无论是保存时保存的对象是JSON.stringify',还是读取时的JSON.parse',*或*都使用['HMSET']将其存储为散列值(http://redis.io/commands/ hmset)和['HGETALL'](http://redis.io/commands/hgetall)。 –

+0

@LinusGThiel谢谢你..我会用hmset和hgetall – sachin

+0

酷 - 你知道吗,我会把它作为答案。 –

回答

1

问题是您正在尝试使用SET保存对象。在redis中,SETGET只能使用字符串,因此返回[object Object]的原因是这是保存在redis中的字符串 - 表示对象的字符串。

您可以将对象序列化为例如JSON,使用JSON.stringify保存时,和JSON.parse阅读时,您可以将对象保存为Redis的哈希值,保存时使用HMSETHGETALL(或HGET/HMGET)阅读时。

编辑:请注意,如果您决定使用redis散列,则不能存在“嵌套”对象 - 即不能存储其中一个属性为数组或另一个对象的对象。也就是说,

{ 
    a: 1, 
    b: 2 
} 

是好的,而

{ 
    a: { 
    b: 2 
    } 
} 

不是。如果你有这样的对象,你需要另一个模型(在这种情况下,使用SET/GET的JSON工作得非常好)。

+1

此答案帮助我!谢谢。 +1为你:) – Rubyrider

相关问题