如何在Redis(NodeJS)中查找数据库的数量

时间:2017-02-16 01:48:45

标签: node.js redis

所以我正在编写一个从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) { });

3 个答案:

答案 0 :(得分:5)

  

解决方案1 ​​

正如@carebdayrvis所提到的,您可以使用INFO命令获取数据库信息,并解析信息以获取数据库的数量。

此解决方案存在两个问题:

  1. 它只返回非空数据库的信息。它没有显示数据库的总数。
  2. 如果信息文本的格式发生变化,则必须重写解析代码。
  3.   

    解决方案2

    调用CONFIG GET DATABASES以获取数据库总数。此结果包括空数据库和非空数据库。您可以使用SELECT db-indexDBSIZE命令确定哪些数据库不为空。

    这种解决方案的优势在于它更具可编程性。

      

    其他东西

    顺便说一下,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命令并循环,直到出现错误为止。