java - Redis hmget 超时时间

标签 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. 网络往返时间(对于大多数云提供商,通常约为 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 个百分位的预期延迟进行规划。

关于java - Redis hmget 超时时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52746743/

相关文章:

c# - BackgroundWorker 超时

java - android 中是否有套接字接收处理程序?

java - 异常 : The path to the driver executable must be set by the webdriver. chrome.driver 系统属性;使用远程 WebDriver

Java - 正则表达式用于分割运算符的数学表达式,排除括号内的运算符

python - 键值数据库选项

sockets - Erlang套接字和接收超时

java - Apache Camel - 向路由发送消息后的响应

go - Redis `TIME` 集群模式命令

javascript - 等待 Redis 在 Node.JS 中设置数组

amazon-web-services - ECS Execution Role导致容器启动时日志驱动失败?