我正在尝试了解延迟与每秒可以处理的最大数量或请求数。
我所理解的RTT是消息到达目的地并确认回源所需的时间。所以我假设服务器每秒只能处理最大请求数,不应超过一秒内平均往返的总和。我的本地 ping 测试显示为
> ping 127.0.0.1
rtt min/avg/max/mdev = 0.089/0.098/0.120/0.012 ms
平均而言,仅网络往返就需要 0.098 毫秒,这意味着 10 ping 请求/毫秒。所以我假设按顺序,客户端最多只能执行 10_000 req/sec,而事实证明我错了。Redis-benchmark 工具显示了不同的东西。
> redis-benchmark -t set -c 1 -h 127.0.0.1
====== SET ======
100000 requests completed in 2.53 seconds
1 parallel clients
3 bytes payload
keep alive: 1
100.00% <= 1 milliseconds
39588.28 requests per second
单个客户端能够执行 39 个 req/ms,而我预计最大为 10req/ms。
谁能帮助我哪里出错或误解了?
即使使用单个逻辑客户端线程,命令也可以流水线化,这意味着:您可以在第一个响应返回之前发送大量请求。响应始终按请求顺序返回(除非您使用的是 pub/sub(,因此流水线客户端只需要保留尚未看到响应的已发送消息队列,并在请求到达时将响应与请求配对。
所以:你不受延迟的严格约束,尽管这仍然是一个有用的数字。原始总数(受带宽和服务器容量限制(也很有意义,因为通常您希望发出多个命令。