【问题标题】:how to getAll on node redis如何在节点redis上getAll
【发布时间】:2015-12-08 11:19:33
【问题描述】:

我正在尝试使用 hgetall 从 redis 获取所有值以返回所有 'Task_'* 值。

代码:

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

【问题讨论】:

  • 如果您有解决方案,请将其标记为已接受。它是如何工作的!

标签: javascript node.js redis node-redis


【解决方案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);
        });
    });
});

【讨论】:

  • 很高兴它有效,如果它解决了您的问题,请考虑接受答案。
  • 只是想指出,强烈建议不要在生产环境中使用keys 命令。来自the docs:“警告:将 KEYS 视为仅应极其小心地在生产环境中使用的命令。在对大型数据库执行时可能会破坏性能。此命令用于调试和特殊操作,例如更改您的键空间布局。不要在常规应用程序代码中使用 KEYS。如果您正在寻找一种在键空间子集中查找键的方法,请考虑使用 SCAN 或集合。"
【解决方案2】:

我找到了另一个解决方案...

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 函数返回所有结果...更好处理。

【讨论】:

    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 2015-11-29
    • 2021-07-22
    • 2023-03-22
    • 1970-01-01
    • 2021-11-01
    • 2018-04-12
    • 2016-09-20
    相关资源
    最近更新 更多