2014-09-28 52 views
0

我是Redis的新手......像30分鐘新建的那樣,我正在使用node-redis包來構建一個web應用程序。 從我看到用來存儲網頁數據的最佳數據結構將是一個散列,但我也需要跟蹤我在整個應用程序中擁有哪些網頁。所以這是我在做什麼:在redis中返回一個哈希存儲區的值

//this is in Redis-CLI 
//add the page and it's data to a hash 
HMSET pages:/myurl url /myurl title myTitle description myDescription content myContent lang_mirror /frenchurl 

//then I add the page to my set 
sadd pages pages:/myurl 

現在我想回到內頁的值:/ myurl,有沒有設定一個單一的呼叫能爲我做到這一點?或者內建在node-redis中的東西是這樣的嗎?

回答

1

考慮使用命令HGETALL,就像這樣:

HGETALL pages:/myurl 

編輯基於評論: 啊,所以看SORT,但考慮到其複雜性和內存佔用:

127.0.0.1:6379> HMSET pages:/myurl url /myurl title myTitle description myDescription content myContent lang_mirror /frenchurl 
OK 
127.0.0.1:6379> SADD pages pages:/myurl 
(integer) 1 
127.0.0.1:6379> SORT pages BY nosort GET *->url GET *->title GET *->description GET *->content GET *->lang_mirror 
1) "/myurl" 
2) "myTitle" 
3) "myDescription" 
4) "myContent" 
5) "/frenchurl" 

殷勤地,你可以考慮使用Lua服務器端腳本。

+0

我看到了,但它沒有做我所需要的。我需要能夠在一次調用中獲得我所有的哈希,比如頁面:/ myurl,pages:/ myurl2,pages:/ myurl3等,這就是爲什麼我想把我所有的頁面哈希集合到一個集合中。 – 2014-09-28 13:33:38

+0

理解 - 用更合適的建議編輯:) – 2014-09-28 16:05:50

0

你必須至少進行2次調用,一次是獲得該組的成員,然後是另一次獲得所有哈希,下面是使用node-redis的一些示例代碼。

redis.smembers('pages', function(err, pages) { 
    var multi = redis.multi(); 
    for(var i=0; i<pages.length; ++i) { 
     multi.hgetall(pages[i]); 
    } 

    multi.exec(function(err, pageData) { 
     console.log(pageData); 
    }); 
});