Node.js 节点\u redis正在更新已用内存信息

Node.js 节点\u redis正在更新已用内存信息,node.js,redis,node-redis,Node.js,Redis,Node Redis,我正在使用客户端,我想监控Redis当前使用的内存量: const redis = require('redis'); const redisClient = redis.createClient(); setInterval(() => { // add much data to redis, then: console.log(redisClient.server_info.used_memory); }, 1000); 这将记录每个间隔相同的内存量。但是,如果我使用red

我正在使用客户端,我想监控Redis当前使用的内存量:

const redis = require('redis');
const redisClient = redis.createClient();

setInterval(() => {
  // add much data to redis, then:
  console.log(redisClient.server_info.used_memory);
}, 1000);
这将记录每个间隔相同的内存量。但是,如果我使用rediscli“info”命令,我可以看到内存在增加

我提出的唯一解决方案是每次检查内存时创建一个新客户端:

const redis = require('redis');

setInterval(() => {
  // add much data to redis, then create new client to watch memory:
  const redisClient = redis.createClient();
  console.log(redisClient.server_info.used_memory);
  redisClient.quit();
}, 1000);

不过,这似乎不是正确的方法。是否有一种方法可以“更新”已使用的内存信息,而无需每次创建新的客户端

这将实现以下目的:

setInterval(() => {
  redisClient.info((req, res) => {
    res.split("\n").map((line) => {
      if (line.match(/used_memory_human/)) {
        console.log('Used memory: ' + line.split(":")[1]);
      }
    })
  });
}, 1000);

它会将您的
信息输出按行分割,并打印包含
已用内存\u human

的行的值,但我会提醒您
行的值。分割(“:”[1]
在字符串末尾有一个隐藏的
\r
。当在控制台语句的末尾使用时,这不会是一个问题,但是如果要在日志语句的中间使用该值,则需要删除<代码> \r>代码>,否则生成的控制台日志将被篡改。

< P>这是对米哈伊的一个更干净的答案,并且可能是在生产环境中使用的最好的。
setInterval(() => {
    redisClient.info((err, info) => {
        if (err) throw err;
        
        const used = info.split("\n").find(line => line.match(/used_memory_human/)).split(":")[1];

        console.log("Used Memory:", used);
    });
}, 1000);

您是否尝试过调用
redisClient.info()
redisClient.info()
只返回
true
这是一个异步调用。您可以像其他调用一样使用它,例如,
redisClient.info(函数(err,res){console.log(res);})。啊,是的,我现在在node_redis的源代码中看到了。但是,
res
只是一个巨大的字符串,包含与redis cli“info”命令相同的信息。不确定如何从该字符串中访问“used_memory”的值。我可以试试正则表达式……好吧,你必须解析它:)