0

Redis 可以提供亚毫秒级的响应时间。这是一个伟大的承诺。我正在测试 heroku redis 并且我达到1ms了 about 8ms, for a zincrby. 我microtime()在 php 中使用来包装调用。这个heroku redis(我使用的是免费计划)是一个共享实例,并且存在资源争用,所以我希望相同查询的响应时间会有所不同,而且他们肯定会这样做。

我很好奇通过自制软件安装在我的 macbook pro 上的性能与 redis 之间存在差异的原因。那里显然没有网络延迟。我很好奇的是,这是否意味着任何云 redis(即通过网络连接,比如在 aws 中)总是比我拥有一台云服务器并在内部运行 redis 慢很多同一台物理机,从而消除网络延迟?

这些云产品中也存在资源争用,除非选择成本更高的私有服务器。

一些数字:我本地的 macbook pro 始终提供与heroku redis之间的&0.2ms相同的值。zincrby1ms8ms

网络延迟是造成这种情况的原因吗?

4

1 回答 1

1

不,可能不是。

1 Gbit/s 网络的典型延迟约为200us. 那就是0.2ms

更重要的是,在 aws 中你可能至少在 10gbps 上。

正如redis 手册中的这个页面解释的,这两种环境之间延迟变化的主要原因几乎肯定是更高的结果intrinsic latency(有一个 redis 命令可以在任何特定系统上进行测试:redis-cli --intrinsic-latency 100,请参阅上面的手册页)从在 linux 容器中运行

即,网络延迟不是这里看到的变化的主要原因。

这是一个清单(来自上面链接的 redis 手册页)。

  • 如果您负担得起,请选择物理机而不是 VM 来托管服务器。
  • 不要系统地连接/断开服务器(尤其是基于 Web 的应用程序)。尽可能长久地保持联系。
  • 如果您的客户端与服务器位于同一主机上,请使用 Unix 域套接字。
  • 更喜欢使用聚合命令 (MSET/MGET) 或带有可变参数的命令(如果可能)而不是流水线。
  • 更喜欢使用流水线(如果可能)而不是往返顺序。
  • Redis 支持 Lua 服务器端脚本以涵盖不适合原始流水线的情况(例如,当命令的结果是以下命令的输入时)。
于 2018-12-31T17:24:44.657 回答