我一直在阅读 Redis 文档,但我不理解以下段落(来自链接 http://redis.io/topics/benchmarks ):
“天真地迭代同步 Redis 命令不会对 Redis 本身进行基准测试,而是测量您的网络(或 IPC)延迟。要真正测试 Redis,您需要多个连接和/或......”
我做了以下测试以查看 1 个连接和 500 个连接之间的速度差异。正如我们所看到的,当只有 1 个连接时它会慢得多。但我不明白连接数为什么以及如何影响 Redis 速度性能。我是计算机网络的新手,任何帮助将不胜感激!
$ redis-benchmark -c 500 -t ping
====== PING_INLINE ======
10000 requests completed in 0.10 seconds
500 parallel clients
3 bytes payload
keep alive: 1
$ redis-benchmark -c 1 -t ping
====== PING_INLINE ======
10000 requests completed in 0.19 seconds
1 parallel clients
3 bytes payload
keep alive: 1
最佳答案
当延迟 > 吞吐量时,您需要多个请求在运行中才能解决吞吐量瓶颈,而不仅仅是往返延迟。
例如如果网络往返是 10 毫秒,那么客户端在发送另一个请求之前等待一个请求的结果在数学上限制为 100 个请求/秒。如果您的服务器可以处理更多,则无法使用单个客户端对其进行测试。
逻辑与网络上的常规数据传输相同,例如TCP 窗口大小。这篇 wiki 文章 ( https://en.wikipedia.org/wiki/Bandwidth-delay_product) 可能有助于阐明需要保持多个数据包/操作在运行中的概念。对于 redis 请求,总延迟包括处理时间 + 网络时间。如果您在这方面遇到瓶颈,您将无法使服务器的 CPU(或网络)保持 100% 繁忙。
注意实现Instruction-Level Parallelism in a CPU也是同一个概念。 (例如,要对一组 float 求和,如果 FP add 具有 3 个周期延迟和每 1c 吞吐量一个,即完全流水线化,则您应该至少使用 3 个累加器)。
关于networking - 为什么客户端连接数会影响Redis性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39108911/