Node.js 节点\u redis正在更新已用内存信息
我正在使用客户端,我想监控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
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”的值。我可以试试正则表达式……好吧,你必须解析它:)