Redis&Node.js:所有键

Ali*_*Ali 21 redis node.js

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

  1. AXF
  2. x9U

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

Bil*_*ill 42

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

npm install node_redis
Run Code Online (Sandbox Code Playgroud)

更新

上述命令不再可用.你可以使用以下内容:

npm install redis
Run Code Online (Sandbox Code Playgroud)

然后你会做:

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]);
  }
});        
Run Code Online (Sandbox Code Playgroud)

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

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


小智 6

安装node_redis

npm install redis
Run Code Online (Sandbox Code Playgroud)

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

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) {});
Run Code Online (Sandbox Code Playgroud)