2014-09-28 58 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); 
    }); 
});