基本问题:使用 Node.js 我想获取我的 redis 数据库中的所有键。当我调用keys *时,我的 redis 数据库看起来像这样;
- aXF
- x9U
- 好
所以我拥有的每条记录都有一个唯一的键,生成为随机字符串。现在我想调用类似foreach(key in Redis)并获取 redis 中的所有键。是否可以使用 Node.js 和 Redis完成类似“SELECT * FROM Redis”的查询
当然,您需要安装可以在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。如果您正在寻找一种在键空间子集中查找键的方法,请考虑使用集合。
为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) {});
npm install node_redis
现在不再可用。改用这个 -
npm install redis
npm 上的redis
node 包最近进行了重大更新(v4),并且有一种更简单的方法可以完成此操作。
使用该sendCommand
函数,您可以运行任何您希望的 redis 命令,而无需包中的专用函数,并且可以检索输出。
const keys = await client.sendCommand(["keys","*"]);
console.log(keys); // ["aXF","x9U","lOk",...]
请考虑比尔回答中提到的要点:
警告:将 KEYS 视为仅应极其小心地在生产环境中使用的命令。当它针对大型数据库执行时,它可能会破坏性能。此命令用于调试和特殊操作,例如更改键空间布局。不要在常规应用程序代码中使用 KEYS。如果您正在寻找一种在键空间子集中查找键的方法,请考虑使用集合。