【问题标题】:Returning the value of a hash stores inside a set in redis返回 redis 集合内的哈希存储的值
【发布时间】:2015-11-19 14:35:20
【问题描述】:

我是 Redis 的新手... 30 分钟的新手,我正在使用 node-redis 包来构建一个 Web 应用程序。 从我所见,用于存储网页数据的最佳数据结构将是哈希,但我还需要跟踪我在整个应用程序中拥有的网页。所以这就是我正在做的:

//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

现在我想返回 pages:/myurl 中的值,是否有一个调用 set 可以为我执行此操作?或者 node-redis 内置的东西可以做到这一点?

【问题讨论】:

    标签: redis 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 服务器端脚本。

    【讨论】:

    • 我看到了,但它不能满足我的需要。我需要能够在一次调用中获取我的所有哈希值,例如 pages:/myurl、pages:/myurl2、pages:/myurl3 等,这就是为什么我想将所有页面哈希值放入一个集合中。
    【解决方案2】:

    您至少需要进行 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);
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 2015-05-26
      相关资源
      最近更新 更多