有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Redis hmget的java超时时间

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

我使用Redis和Java以及莴苣。对于RedisAdvancedClusterAsyncCommands.hmget,我试图为它添加一个超时。我认为应该在10毫秒左右完成,但它总是超时,直到我不断增加数字

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


共 (1) 个答案

  1. # 1 楼答案

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

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

    2. 请求的序列化/反序列化-如果要获取100万个密钥,则需要花费大量时间

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

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

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

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

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