0

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

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(); 但我没有得到存储值,而是我只得到[object object];

4

1 回答 1

5

问题是您正在尝试使用SET. 在 redis 中,SET并且GET只使用字符串,所以你[object Object]回来的原因是那是保存在 redis 中的字符串——你的对象的字符串表示。

您可以将对象序列化为例如 JSON,JSON.stringify在保存时和JSON.parse读取时使用,或者您可以将对象保存为 redis 哈希,HMSET在保存时使用,和HGETALL(或HGET/ HMGET)在读取时使用。

编辑:但请注意,如果您决定使用 redis 哈希,则不能拥有“嵌套”对象——即,您不能存储其中一个属性是数组或另一个对象的对象。那是,

{
  a: 1,
  b: 2
}

没关系,而

{
  a: {
    b: 2
  }
}

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

于 2013-05-29T11:18:49.743 回答