bigywater.tech
Redis · 101

redis-cli --latency

redis-cli 自带三个测延迟的开关:--latency、--latency-history、--latency-dist,再加一个不连服务器的 --intrinsic-latency。它们测的是「客户端到服务器的往返」,不是服务器内部的耗时。这篇在空闲和有阻塞两种情形下各跑一遍,看它们分别能发现什么。

avg 看不见
3 次 200 ms 阻塞:max 203.995 ms,avg 只有 3.108 ms
窗口
--latency-history 把一次 150 ms 阻塞定位在它所在的那个 1 秒窗口(max 151 ms)
不连服务器
--intrinsic-latency 只测本机自身的调度抖动

--latency:min / max / avg

实测 · 本机执行输出
  最后一行: 0.078 0.477 0.224 72

不停发 PING,每次往返计一个样本。空闲实例上 avg 约 0.2 ms。

实测 · 本机执行输出
  最后一行: 0.069 203.995 3.108 71

制造 3 次 200 ms 的阻塞:max 抓到了 203.995 ms,avg 只有 3.108 ms。看平均值几乎发现不了问题,最大值才是要看的。

--latency-history

实测 · 本机执行输出
  窗口 1(每个窗口结束时的一行): min: 0.106, max: 0.387, avg: 0.217 (72 samples) -- 1.01 seconds range
  窗口 2(每个窗口结束时的一行): min: 0.091, max: 151.485, avg: 2.318 (72 samples) -- 1.14 seconds range
  窗口 3(每个窗口结束时的一行): min: 0.137, max: 0.501, avg: 0.253 (72 samples) -- 1.01 seconds range
  窗口 4(每个窗口结束时的一行): min: 0.129, max: 0.449, avg: 0.252 (73 samples) -- 1.01 seconds range
  窗口 5(每个窗口结束时的一行): min: 0.146, max: 0.491, avg: 0.259 (73 samples) -- 1.00 seconds range
  窗口 6(每个窗口结束时的一行): min: 0.106, max: 0.396, avg: 0.229 (70 samples) -- 1.00 seconds range

每个窗口输出一行(默认 15 秒,这里 -i 1)。150 ms 的阻塞只出现在窗口 2(max: 151.485),其它窗口都没有——可以看到「什么时候」出现的尖峰。(输出用了光标控制字符不断刷新同一行,我截取每个窗口结束时的最终一行。)

--latency-dist

实测 · 本机执行输出
   A,B,C,D,E        10,20,30,40,50  milliseconds
   F,G,H,I,J        .1,.2,.3,.4,.5       seconds
   K,L,M,N,O,P,Q,?  1,2,4,8,16,30,60,>60 seconds
   From 0 to 100%:                    
   ---------------------------------------------
   .-*#123456789ABCDEFGHIJKLMNOPQ?
   .-*#123456789ABCDEFGHIJKLMNOPQ?
   .-*#123456789ABCDEFGHIJKLMNOPQ?

延迟分布。每一行的字符表示各区间的占比,图例里的字母对应从毫秒到分钟的区间。这次空闲测量的样本都落在最低区间。它主要在终端里以彩色显示,文本抓取不能完整还原,所以这里只展示图例。

--intrinsic-latency:排除机器本身

实测 · 本机执行输出
   3801847 total runs (avg latency: 0.7891 microseconds / 789.09 nanoseconds per run).
   Worst run took 204x longer than the average latency.

不连接任何服务器,在本机紧循环 3 秒,记录最慢的一次比平均慢多少倍。如果这个值本身就大,说明机器(或虚拟机、容器)自己有调度抖动,Redis 再好也快不起来。平均 0.7891 µs;最差比平均慢的倍数每次运行都不同。

分步演示:三个延迟工具

redis-cli --latency
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 / Redis 8.10.2 独立实例(本机回环端口,save 关闭),redis-cli 风格输出由自写的 RESP 客户端打印;计时用 time.perf_counter,数字每次运行会有小幅抖动。--latency 与 --latency-history 用 DEBUG SLEEP 制造阻塞;history 用伪终端捕获输出
    • 没有验证:--latency-dist 的彩色刷新、--latency 对生产实例的额外负载、虚拟机 / 容器下的 --intrinsic-latency、跨机器网络下的 --latency
    京ICP备2026067502号-1京公网安备11010502063487号