Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在Redis(NodeJS)中查找数据库数量_Node.js_Redis - Fatal编程技术网

Node.js 如何在Redis(NodeJS)中查找数据库数量

Node.js 如何在Redis(NodeJS)中查找数据库数量,node.js,redis,Node.js,Redis,因此,我正在编写一个从redis读取数据的节点应用程序,我想做一个某种查询,返回任何人都知道的数据库数量 所以现在基本上我有一种方法来获取数据库中的所有键,但我想要更高的级别,我想要迭代所有数据库,然后获取所有键。这是获取当前数据库的所有键的代码 const client = redis.createClient({host: "127.0.0.1", port: 6379}); client.multi() .keys('*', function (err, replies) {

因此,我正在编写一个从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) { });
输出包括该信息。您应该能够从节点客户端调用它

输出包括该信息。您应该能够从节点客户端调用它

解决方案1

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

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

  • 它只返回非空数据库的信息。它不会显示数据库的总数
  • 如果信息文本的格式发生更改,则必须重写解析代码
  • 解决方案2

    调用
    CONFIG GET DATABASES
    获取数据库总数。此结果包括空数据库和非空数据库。您可以使用
    selectdb index
    DBSIZE
    命令来确定哪些数据库不是空的

    此解决方案的优点是更易于编程

    其他东西

    顺便说一句,
    不应在生产环境中使用,它可能会长时间阻止Redis。你应该考虑使用<代码>扫描< /COD>命令。 解决方案1

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

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

  • 它只返回非空数据库的信息。它不会显示数据库的总数
  • 如果信息文本的格式发生更改,则必须重写解析代码
  • 解决方案2

    调用
    CONFIG GET DATABASES
    获取数据库总数。此结果包括空数据库和非空数据库。您可以使用
    selectdb index
    DBSIZE
    命令来确定哪些数据库不是空的

    此解决方案的优点是更易于编程

    其他东西

    顺便说一句,
    不应在生产环境中使用,它可能会长时间阻止Redis。你应该考虑使用<代码>扫描< /COD>命令。 Redis security建议禁用CONFIG命令,以便远程用户无法重新配置实例。RedisHttpSessionConfiguration需要在初始化期间访问此配置。托管的Redis服务(如AWS ElastiCache)默认情况下禁用该命令,而没有重新启用该命令的选项

    参考:

    一个更可靠的替代方法是使用select命令并循环,直到出现错误

    Redis security建议禁用CONFIG命令,以便远程用户无法重新配置实例。RedisHttpSessionConfiguration需要在初始化期间访问此配置。托管的Redis服务(如AWS ElastiCache)默认情况下禁用该命令,而没有重新启用该命令的选项

    参考:


    一个更可靠的替代方法是使用select命令并循环,直到出现错误。

    谢谢,这正是我在数据库和scan命令中所需要的。节点中的确切语法是:client.config(['get','databases'],(err,reply)=>{numberOfDbs=parseInt(reply[1]);client.quit();返回解析(numberOfDbs);};它以数组的形式返回,是数组中的第二个对象(因此是reply[1]),这正是我在数据库和scan命令中所需要的。节点中的确切语法是:client.config(['get','databases'],(err,reply)=>{numberOfDbs=parseInt(reply[1]);client.quit();返回解析(numberOfDbs);};它以数组的形式返回,并且是数组中的第二个对象(因此回复[1])