node_redis 更新已用内存信息
node_redis updating used memory info
我正在使用 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);
不过,感觉这不是正确的方法。有没有办法不用每次都创建新客户端就可以 "update" used_memory 信息?
这样做就可以了:
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
的行的值
Mihai 的答案有效,但我会警告 line.split(":")[1]
的值在字符串末尾有一个隐藏的 \r
。当在控制台语句的末尾使用时,这不会有问题,但如果您想在日志语句中间使用该值,则需要删除 \r
,否则生成的 console.log会乱码。
这是比 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);
我正在使用 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);
不过,感觉这不是正确的方法。有没有办法不用每次都创建新客户端就可以 "update" used_memory 信息?
这样做就可以了:
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
Mihai 的答案有效,但我会警告 line.split(":")[1]
的值在字符串末尾有一个隐藏的 \r
。当在控制台语句的末尾使用时,这不会有问题,但如果您想在日志语句中间使用该值,则需要删除 \r
,否则生成的 console.log会乱码。
这是比 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);