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 楼答案
完成请求所需的时间受以下因素影响:
网络往返时间(大多数云提供商通常为~1ms,专用LAN中较少)
请求的序列化/反序列化-如果要获取100万个密钥,则需要花费大量时间
redis内部请求的内部处理。同样,通常时间不多(在快速情况下可能是几微秒),但HMGET中的元素数是O(n)
响应的序列化/反序列化。HMGET的有效载荷越大,所需时间越长。Redis需要将数据复制到网络缓冲区,客户端需要解析响应。如果您的响应很大,那么在客户端库或redis中花费的时间可能会很长
网络带宽-响应越大,网络需要发送回的数据包越多。你不希望1GB的响应在10毫秒内返回,对吧
redis处理的其他请求。这很少是一个问题,但如果您长时间运行Lua脚本、键命令、聚合交叉点或联合,因为redis是单线程的,所以每个请求都会延迟所有其他请求
我想说的是,这实际上取决于你在做什么以及你在做什么其他事情。10ms可能太低了。另外,请记住延迟有一个分布,您应该计划应用程序的平均、中位数、90%和99%预期延迟