Redis MONITOR 命令用于实时打印出 Redis 服务器接收到的命令,调试用。
MONITOR 用来帮助我们知道数库正在做什么。可以通过 redis-cli
和 telnet
调用 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 命令不会出现在执行结果中。