抛砖系列之redis监控命令( 二 )


Pub/sub mode【发布订阅模式】redis-cli可以用来发布/订阅消息,如果你的系统中使用了redis的发布订阅功能,可以使用redis-cli的这一特性来进行一些调试工作 。
比如,使用redis-cli发布一条消息到mychannel
redis-cli publish mychannel helloworld同样的,使用redis-cli订阅mychannel发来的消息
redis-cli subscribe mychannelReading messages... (press Ctrl-C to quit)1) "subscribe"2) "mychannel"3) (integer) 11) "message"2) "mychannel"3) "helloworld"Monitoring the latency of Redis instances【监控延迟】 redis常用来构建延迟敏感的应用,延迟涉及多个环节,客户端到网络层之间,网络层到redis之间,redis自身处理等 。
redis-cli提供了多种工具帮助我们发现延迟,涉及的指标有最小值、最大值、平均值、延迟分布情况等 。
基本的延迟检查工具是redis-cli --latency 。使用--latency,redis-cli 运行一个循环,以每秒100次的速度向redis发送PING命令,并测量收到回复的时间,统计信息在控制台中实时更新 。
# redis-cli --latencymin: 0, max: 3, avg: 0.28 (536 samples)统计数据以毫秒为单位,上面的测试一共发了536个PING命令,最小响应时间为0毫秒(0不代表没有延迟,只是说毫秒统计不到),最大为3毫秒,平均值为0.28毫秒 。
有时我们更希望看到redis延迟变化的趋势,这时--latency-history就可以派上用?。?它的工作机制和--latency相同 , 只是每15秒(默认)重新开启一个测试会话 。
redis-cli --latency-historymin: 0, max: 7, avg: 0.25 (1432 samples) -- 15.00 seconds rangemin: 0, max: 1, avg: 0.24 (1435 samples) -- 15.00 seconds rangemin: 0, max: 15, avg: 0.27 (1429 samples) -- 15.01 seconds rangemin: 0, max: 5, avg: 0.28 (1431 samples) -- 15.01 seconds rangemin: 0, max: 5007, avg: 7.71 (839 samples) -- 15.01 seconds rangemin: 1, max: 18, avg: 3.58 (1092 samples) -- 15.01 seconds rangemin: 0, max: 13, avg: 3.56 (1093 samples) -- 15.01 seconds rangemin: 1, max: 15, avg: 3.61 (1090 samples) -- 15.00 seconds rangemin: 1, max: 17, avg: 3.60 (1091 samples) -- 15.01 seconds rangemin: 0, max: 26, avg: 2.57 (1178 samples) -- 15.00 seconds range可以看到,上面每隔15秒输出一组数据 , 在第5个15秒开始时耗时明显增加 。
内部还实现了另一个非比寻常的延迟检测工具 , 它不检查 Redis 实例的延迟,而是检查运行的计算机的延迟,此延迟是内核计划程序、虚拟机管理程序(如果是虚拟化实例)等所固有的 。
redis称之为内在延迟,因为它对程序员来说基本上是不透明的,如果 redis 实例具有高延迟,检查其他因素之外,还值得检查内核本身的延迟 。
通过测量内在延迟 , 我们就知道这是基准 , redis 无法超越内核,使用redis-cli --intrinsic-latency <持续时间>开启测试,持续时间5秒 。
redis-cli --intrinsic-latency 5Max latency so far: 1 microseconds.Max latency so far: 16 microseconds.Max latency so far: 70 microseconds.Max latency so far: 109 microseconds.Max latency so far: 145 microseconds.Max latency so far: 205 microseconds.Max latency so far: 283 microseconds.Max latency so far: 363 microseconds.Max latency so far: 2507 microseconds.Max latency so far: 4541 microseconds.100063828 total runs (avg latency: 0.0500 microseconds / 49.97 nanoseconds per run).Worst run took 90878x longer than the average latency.# redis-cli --intrinsic-latency 5Max latency so far: 1 microseconds.Max latency so far: 39 microseconds.Max latency so far: 41 microseconds.Max latency so far: 45 microseconds.Max latency so far: 62 microseconds.Max latency so far: 8839 microseconds.Max latency so far: 9357 microseconds.Max latency so far: 10310 microseconds.Max latency so far: 10322 microseconds.Max latency so far: 10573 microseconds.Max latency so far: 10682 microseconds.Max latency so far: 11177 microseconds.Max latency so far: 11514 microseconds.35539207 total runs (avg latency: 0.1407 microseconds / 140.69 nanoseconds per run).Worst run took 81840x longer than the average latency.注意:--intrinsic-latency只能在redis实例所在机器运行 。
从上面的输出可以看到内核的最大延迟达到了11514微秒(115毫秒左右),也从侧面说明执行redis命令的最大延迟起码在115毫秒之上 。
Replica mode【副本模式】 副本模式是一项高级功能,对 redis 开发人员调试操作非常有用,它可以监控到主节点在复制流中发送到其副本的内容,使用redis-cli --replica开启监控 。redis-cli --replicasending REPLCONF capa eofsending REPLCONF rdb-filter-onlySYNC with master, discarding bytes of bulk transfer until EOF marker...SYNC done after 211 bytes. Logging commands from master.sending REPLCONF ACK 0"ping""SELECT","0""set","a","b""hset","hash","name","jack"可以看到主节点上执行了set,hset等指令,命令行实时输出 。

推荐阅读