Redis hmget 超时时间

timeout time for Redis hmget

        RedisFuture<List<KeyValue<String, String>>> future = redisStatsConnection.hmget(key, 10);
if (!future.await(500, TimeUnit.MILLISECONDS)) {
                ....
            }

我将 Redis 与 Java 和 Lettuce 一起使用。对于 RedisAdvancedClusterAsyncCommands.hmget,我正在尝试为其添加超时。我认为应该在 10 毫秒左右完成,但它总是超时,直到我不断增加数字。

我能知道 Redis 的平均超时时间是多少吗?或者还有其他建议吗?

完成请求所需的时间受以下因素影响:

  1. 网络往返时间(大多数云提供商通常为 1 毫秒,在专用 LAN 中更少)

  2. Serialization/deserialization 的请求 - 如果您执行 100 万个密钥的 HMGET,那可能会花费很多时间。

  3. redis内部请求的内部处理。同样,时间通常不会很多(在快速情况下可能是几微秒),但是 HMGET 中的元素数量是 O(n)。

  4. 响应的序列化/反序列化。 HMGET 的负载越大,花费的时间就越长。 Redis 需要将数据复制到网络缓冲区,客户端需要解析响应。如果您的响应很大,那么可能会在客户端库或 Redis 中花费大量时间。

  5. 网络带宽 - 响应越大,网络需要发回的数据包越多。您不会期望在 10 毫秒内对 return 做出 1GB 的响应,对吧?

  6. redis处理的其他请求。这很少是个问题,但是如果你有很长的 运行 Lua 脚本、KEYS 命令、聚合交集或联合 运行 - 因为 Redis 是单线程的,所以每个请求都会延迟所有其他请求。

我的意思是,这实际上取决于您在做什么以及您在做什么其他事情。 10ms 可能太低了。另外,请记住延迟有一个分布,您应该为您的应用程序的平均、中位数、第 90 个百分位和第 99 个百分位的预期延迟进行规划。