所以我正在编写一个从redis读取的节点应用程序,我想做一些返回数据库数量的查询,有人知道怎么做。
所以现在基本上我所拥有的是一种获取数据库中所有键的方法,但我想要更高级别,我想迭代所有数据库然后获取所有键。这是获取当前数据库的所有密钥的代码。
const client = redis.createClient({host: "127.0.0.1", port: 6379});
client.multi()
.keys('*', function (err, replies) {
console.log("MULTI got " + replies.length + " replies");
let dbs = [replies];
let dbData = {};
replies.forEach(function (reply, index) {
client.get(reply, function (err, data) {
console.log(reply + " " +data);
});
});
})
.exec(function (err, replies) { });
答案 0 :(得分:5)
解决方案1
正如@carebdayrvis所提到的,您可以使用INFO
命令获取数据库信息,并解析信息以获取数据库的数量。
此解决方案存在两个问题:
解决方案2
调用CONFIG GET DATABASES
以获取数据库总数。此结果包括空数据库和非空数据库。您可以使用SELECT db-index
和DBSIZE
命令确定哪些数据库不为空。
这种解决方案的优势在于它更具可编程性。
其他东西
顺便说一下,KEYS
不应该在生产环境中使用,它可能会长时间阻止Redis。您应该考虑使用SCAN
命令。
答案 1 :(得分:1)
This redis command's输出包含该信息。您应该能够从节点客户端调用它。
答案 2 :(得分:1)
Redis安全性建议禁用CONFIG命令,以使远程用户无法重新配置实例。 RedisHttpSessionConfiguration在初始化期间需要对此进行访问。托管的Redis服务(例如AWS ElastiCache)默认情况下会禁用此命令,而没有重新启用它的选项。
参考:https://github.com/spring-projects/spring-session/issues/124
一种更可靠的选择是使用select命令并循环,直到出现错误为止。