25

基本问题:使用 Node.js 我想获取我的 redis 数据库中的所有键。当我调用keys *时,我的 redis 数据库看起来像这样;

  1. aXF
  2. x9U

所以我拥有的每条记录都有一个唯一的键,生成为随机字符串。现在我想调用类似foreach(key in Redis)并获取 redis 中的所有键。是否可以使用 Node.js 和 Redis完成类似“SELECT * FROM Redis”的查询

4

4 回答 4

50

当然,您需要安装可以在https://github.com/mranney/node_redisredis找到的模块。 nodejs

npm install node_redis

更新

上述命令不再可用。您可以使用以下内容:

npm install redis

然后你会这样做:

var redis = require('redis'),
    client = redis.createClient();

client.keys('*', function (err, keys) {
  if (err) return console.log(err);

  for(var i = 0, len = keys.length; i < len; i++) {
    console.log(keys[i]);
  }
});        

一般来说,您不会希望总是返回所有键(对于较大的数据集,性能会很差),但是如果您只是测试一下,这将起作用。文档中甚至还有一个很好的警告Redis

警告:将 KEYS 视为仅应极其小心地在生产环境中使用的命令。当它针对大型数据库执行时,它可能会破坏性能。此命令用于调试和特殊操作,例如更改键空间布局。不要在常规应用程序代码中使用 KEYS。如果您正在寻找一种在键空间子集中查找键的方法,请考虑使用集合。

于 2012-10-09T06:24:38.913 回答
6

为nodejs安装redis客户端

npm install redis

然后我执行以下操作来获取所有密钥的数据

var redis =   require('redis'),
    client =  redis.createClient();

client.multi()
    .keys('*', function (err, replies) {
        // NOTE: code in this callback is NOT atomic
        // this only happens after the the .exec call finishes.

        console.log("MULTI got " + replies.length + " replies");

        replies.forEach(function (reply, index) {
            console.log("Reply " + index + ": " + reply.toString());
            client.get(reply, function(err, data){
                    console.log(data);
            });
        });

    })
    .exec(function (err, replies) {});
于 2015-09-03T17:25:47.243 回答
2
npm install node_redis 

现在不再可用。改用这个 -

npm install redis
于 2015-08-20T11:04:11.650 回答
0

Node-Redis v4 更新:

npm 上的redisnode 包最近进行了重大更新(v4),并且有一种更简单的方法可以完成此操作。

使用该sendCommand函数,您可以运行任何您希望的 redis 命令,而无需包中的专用函数,并且可以检索输出。

const keys = await client.sendCommand(["keys","*"]);
console.log(keys); // ["aXF","x9U","lOk",...]

笔记:

请考虑比尔回答中提到的要点:

警告:将 KEYS 视为仅应极其小心地在生产环境中使用的命令。当它针对大型数据库执行时,它可能会破坏性能。此命令用于调试和特殊操作,例如更改键空间布局。不要在常规应用程序代码中使用 KEYS。如果您正在寻找一种在键空间子集中查找键的方法,请考虑使用集合。

于 2022-01-17T14:47:20.370 回答