【问题标题】:timeout time for Redis hmgetRedis hmget 的超时时间
【发布时间】:2018-10-10 18:36:36
【问题描述】:
        RedisFuture<List<KeyValue<String, String>>> future = redisStatsConnection.hmget(key, 10);
if (!future.await(500, TimeUnit.MILLISECONDS)) {
                ....
            }

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

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

【问题讨论】:

  • 你有没有测量过HMGET 需要多长时间才能完成?

标签: java redis timeout lettuce


【解决方案1】:

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

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

  2. 请求的序列化/反序列化 - 如果您对 100 万个密钥执行 HMGET,这可能会花费很多时间。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-01-04
    • 2019-10-22
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2014-02-09
    • 1970-01-01
    相关资源
    最近更新 更多