我正在尝试了解延迟与每秒可处理的最大请求数。
我对 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 个请求/秒。而事实证明我错了。 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 个请求/毫秒,而我期望最多 10 个请求/毫秒。
任何人都可以帮助我哪里出错或被误解了吗?
最佳答案
即使使用单个逻辑客户端线程,命令也可以流水线化,这意味着:您可以在第一个响应返回之前发送很多 请求。响应总是按请求顺序返回(除非您使用的是发布/订阅),因此流水线客户端只需要保留一个尚未看到响应的已发送消息队列,并在请求到达时将响应配对。
因此:您不受延迟的严格限制,尽管延迟仍然是一个有用的数字。原始吞吐量(受带宽和服务器容量限制)也有意义,因为通常情况下您想要发出多个命令。
关于redis - 试图了解 Redis ping 延迟测试与 Ping 命令延迟测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49749642/