networking - 为什么客户端连接数会影响Redis性能?

标签 networking redis benchmarking

我一直在阅读 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/

相关文章:

c - SO_RCVBUF 的最小值是多少?

java - UDP聊天问题

database - TPC-C、TPC-E 和 TPC-H 基准测试有什么区别?

c# - 跟踪 TCP 上已连接客户端的最佳方法是什么?

linux - 无法使用 etcd 设置多主机 Docker 覆盖网络

node.js - 等待所有 promise 在 nodejs 中用 Bluebird 完成

php - 在 Redis 中将 JSON 存储为字符串时转义特殊字符

Redis : Sorted sets for specific SMEMBERS

java - 此计时代码中出现额外错误时间的原因

java - 网络编程远未达到基准