尝试理解REDIS Monitor命令

6
我正在尝试理解Redis中可用的MONITOR命令以及如何有效地使用它来确定我的应用程序的负载。 我不明白的是,如何读取在CLI上显示的信息。例如,我知道IP地址前面的数字是“DB Index”,但我可以从那个数字推断出什么呢?
可用于MONITOR的示例是:
$ redis-cli monitor
1339518083.107412 [0 127.0.0.1:60866] "keys" "*"
1339518087.877697 [0 127.0.0.1:60866] "dbsize"
1339518090.420270 [0 127.0.0.1:60866] "set" "x" "6"
1339518096.506257 [0 127.0.0.1:60866] "get" "x"
1339518099.363765 [0 127.0.0.1:60866] "del" "x"
1339518100.544926 [0 127.0.0.1:60866] "get" "x"

我无法理解“1339518083.107412” 的意义。

2个回答

10

第一部分是以秒.微秒的形式表示的时间戳。


那么这些数据在监控方面有什么用处呢? - user95025
2
您可以在一段时间内计算命令的数量,聚合它们的类型等。 - Barış Uşaklı
所以我假设显示的时间戳是命令开始执行的时间,第一个时间戳和下一个时间戳之间的差值是执行第一个命令所需的时间。这正确吗? - user95025
只有在第一个命令立即处理完后,才会执行 @user95025 命令。 - Itamar Haber

0

第一部分是自1970年1月1日(Unix纪元)以来的秒数和微秒数。因此,如果您想提取时间,可以这样做:

new DateTime(1970,1,1).AddSeconds(seconds).AddMilliseconds(microsecods/1000).ToLocalTime()

或者你可以这样做来解析整行:

var match = Regex.Match(line, @"(?<seconds>\d+)\.(?<microsec>\d+) (?<client>\[[\d\.\s:]+?\]) \""(?<command>\w+?)\""");
var sec = long.Parse(match.Groups["seconds"].Value);
var mic = long.Parse(match.Groups["microsec"].Value);
var rest = line.Substring(match.Groups["command"].Index + match.Groups["command"].Length + 1).Trim();
var command = match.Groups["command"].Value,
var dateTime = new DateTime(1970, 1, 1).AddSeconds(sec).AddMilliseconds(mic / 1000).ToLocalTime()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接