2015-12-08 60 views
2

我試圖從redis中使用hgetall獲取所有值,以返回所有'Task_'*值。如何獲取節點上的所有redis

代碼:

var redis = require('redis'), 
     client = redis.createClient(); 

var tasks = [ 
    { 
     "_id" : "t1", 
     "creationDate" : "2015-10-02T19:39:37.181Z", 
     "device" : "2" 
    },{ 
     "_id" : "t2", 
     "creationDate" : "2015-10-02T19:39:37.181Z", 
     "device" : "1" 
    } 
]; 

tasks.forEach(function(task){ 
    client.set("task_"+task._id, JSON.stringify(task)); 
}) 

client.hgetall("task_", function(e, dt){ 
    if(e)console.log(e); 

    console.log(dt); 
}) 

hgetall回報null

+0

如果您有解決方案,請將其標記爲已接受。這是如何工作的! –

回答

0

我找到了另一個解決方案.. 。

exports.getAll(calback){ 
    var arr = []; 
    client.keys("task_*", function(e, keys){ 
     if(e) {console.log(e);} 
     client.mget(keys, function(err, values){ 
     if(err){console.log(err)} 
     console.log(values); 
     callback(values); 
     }); 
    }); 
} 

使用「keys」獲取所有密鑰,並傳遞給mget。 mget函數返回所有結果...更好地處理。

1

hgetall是哈希你有簡單的按鍵代替,你可以使用這樣的事情:

client.keys("task_*", function(e, keys){ 
    if(e)console.log(e); 

    keys.forEach(function (key) { 
     client.get(key, function (err, value) { 
      console.log(value); 
     }); 
    }); 
}); 
+0

它的工作!謝謝 –

+0

很高興它的工作原理,請考慮接受答案,如果它解決了你的問題。 –

+0

只是想說明,強烈建議不要在生產中使用'keys'命令。從[文檔](http://redis.io/commands/keys):「警告:考慮將KEYS作爲一種命令,只能在生產環境中謹慎使用。當它針對大型數據庫執行時可能會導致性能下降。這個命令用於調試和特殊操作,比如改變你的密鑰空間佈局,不要在普通的應用程序代碼中使用KEYS,如果你正在尋找一種方法在你的密鑰空間的子集中查找密鑰,可以考慮使用SCAN或集合「。 –