在redis中如何获取特定键的值?

时间:2013-05-29 10:17:22

标签: node.js redis

在我的节点应用程序中,我使用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();但我没有得到存储的值,我只得到[对象];

1 个答案:

答案 0 :(得分:2)

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

您可以将对象序列化为例如JSON,保存时使用JSON.stringify,阅读时使用JSON.parse ,您可以将对象保存为redis哈希值,保存时使用HMSET,{{3阅读时(或HGETALL / HGET)。

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

{
  a: 1,
  b: 2
}

没关系,而

{
  a: {
    b: 2
  }
}

不是。如果你有这样的对象,你需要另一个模型(在这种情况下,带有SET / GET的JSON可以很好地工作)。