在redis中返回集合中的哈希存储的值

时间:2014-09-28 00:55:51

标签: redis node-redis

我是Redis的新手......比如新的30分钟,我使用node-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中的东西可以做到这一点吗?

2 个答案:

答案 0 :(得分: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服务器端脚本。

答案 1 :(得分: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);
    });
});