2013-05-29 60 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

相關問題