Redis hmget的超时时间

时间:2018-10-10 18:36:37

标签: java redis timeout lettuce

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

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

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

1 个答案:

答案 0 :(得分:0)

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

  1. 网络往返时间(对于大多数云提供商,通常为〜1ms,在专用LAN中较少)

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

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

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

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

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

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