【问题标题】:node_redis updating used memory infonode_redis 更新已用内存信息
【发布时间】:2018-11-01 15:34:25
【问题描述】:

我正在使用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);

这会在每个间隔记录相同数量的内存。但是,如果我使用 redis-cli "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);

不过,这感觉不是正确的做法。有没有一种方法可以“更新”used_memory 信息而无需每次都创建新客户端?

【问题讨论】:

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

标签: node.js redis node-redis


【解决方案1】:

Mihai 的答案有效,但我会提醒line.split(":")[1] 的值在字符串末尾有一个隐藏的\r。在控制台语句末尾使用时,这不会有问题,但如果您想在日志语句中间使用该值,则需要删除 \r,否则生成的 console.log 将乱码。

【讨论】:

    【解决方案2】:

    这样就可以了:

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

    它将按行拆分info的输出,并打印包含used_memory_human的行的值

    【讨论】:

      【解决方案3】:

      这是 Mihai 的一个更清晰的答案,并且可能是在生产环境中使用的最佳答案。

      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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-15
        • 1970-01-01
        • 1970-01-01
        • 2021-11-28
        • 1970-01-01
        • 1970-01-01
        • 2020-03-06
        • 1970-01-01
        相关资源
        最近更新 更多