MONITOR

Redis MONITOR 命令用于实时打印出 Redis 服务器接收到的命令,调试用。

MONITOR 用来帮助我们知道数库正在做什么。可以通过 redis-clitelnet 调用 MONITOR

当 Redis 用做数据库或者分布式缓存时,MONITOR 可以帮助我们发现程序中的 bug 。

$ 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"

通过 redis-cli 运行 MONITOR 时,可以发送 SIGINT (Ctrl+C) 信号来停止退出。

$ telnet localhost 6379
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
MONITOR
+OK
+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"
QUIT
+OK
Connection closed by foreign host.

通过 telnet 运行 MONITOR 时,可以发送 QUIT来停止退出。

*语法

redis MONITOR 命令基本语法如下:

redis 127.0.0.1:6379> MONITOR 

*MONITOR 不记录的命令

处于安全方面的考虑,所有的管理相关的命令不会记录到 MONITOR 的输出者。

下面几个命令也不会记录:

*MONITOR 的消耗

因为 MONITOR 流返回所有命令,所以用起来会有一定的消耗。 下面是一个基准测试对比:

不带 MONITOR 命令:

$ src/redis-benchmark -c 10 -n 100000 -q
PING_INLINE: 101936.80 requests per second
PING_BULK: 102880.66 requests per second
SET: 95419.85 requests per second
GET: 104275.29 requests per second
INCR: 93283.58 requests per second

MONITOR 命令 (redis-cli monitor > /dev/null):

$ src/redis-benchmark -c 10 -n 100000 -q
PING_INLINE: 58479.53 requests per second
PING_BULK: 59136.61 requests per second
SET: 41823.50 requests per second
GET: 45330.91 requests per second
INCR: 41771.09 requests per second

通过上面的例子可以看到运行一个 MONITOR 命令降低了超过 50% 的吞吐量。 运行多个 MONITOR 会进一步降低性能。

*返回值

输出Redis服务器处理的指令流直到退出。

*历史

  • >=6.0: AUTH 命令不会出现在执行结果中。