【问题标题】:Can the redis template throw a connectimeout exception when executing a redis operation?redis模板在执行redis操作时会抛出connectimeout异常吗?
【发布时间】:2021-03-04 10:35:19
【问题描述】:

我对连接超时和读取超时之间的区别有点困惑。我了解redis在应用程序启动并设置初始连接时可能会抛出连接超时异常。我的问题是在执行 redis 事务时应用程序启动后 redis 是否会引发连接超时?

连接池的工作方式是正在运行的事务从连接池请求一个 redis 连接。如果没有按时提供连接,这是否会被视为可以引发连接超时的事件?然后事务一旦有了连接,就会执行redis操作,这时就可能出现读超时。

对以下与例外相关的绝地武士元素的解释会有所帮助:

   jedis:
          pool:
            max-active: 5
            max-idle: 5
            max-wait: -1ms
            min-idle: 3

我切换到以下默认设置,并且从邮递员那里平均执行 http 请求的速度似乎更快:

jedis:
      pool:
        max-active: 8
        max-idle: 8
        max-wait: -1ms
        min-idle: 0

为什么会这样?

空闲连接和活动连接的定义是什么?

【问题讨论】:

    标签: java spring-boot redis jedis


    【解决方案1】:

    引用doc

    jedis.pool.max-active最大连接数 由池在给定时间分配。使用负值表示否 限制。

    jedis.pool.max-idle 最大“空闲”连接数 水池。使用负值表示无限数量的空闲 连接。

    jedis.pool.max-wait 连接分配的最长时间 当池耗尽时,应该在抛出异常之前阻塞。 使用负值无限期阻塞。

    jedis.pool.min-idle 目标为最小空闲数 在池中维护的连接。此设置仅有效 如果它和驱逐运行之间的时间都是正数。

    jedis.pool.time-between-eviction-runs 空闲运行之间的时间 对象驱逐线程。为正时,空闲对象驱逐线程 启动,否则不执行空闲对象驱逐。

    增加max-active/max-idle 仅意味着您将拥有一些额外的连接。由于您已将连接数从 5 个增加到 8 个,因此您可以发送 3 个额外的请求。另一方面,您已将 max-wait 设置为 -1,因此您可能会无限期等待。

    空闲连接:当一个连接从连接池中被取出时,一旦它的使用结束,它就会被放回连接池中。连接池使用两个参数来决定连接是被丢弃还是以后可以使用。根据驱逐超时,活动连接将在驱逐超时后关闭,例如,如果驱逐超时为 5 秒并且连接是在 10 秒前创建的,则可以关闭此连接以到达max-idle 连接。如果活动连接数低于max-idle,则可以保留此连接并将重复使用。

    【讨论】:

    • 什么是空闲连接?
    猜你喜欢
    • 2022-11-23
    • 2020-05-26
    • 2013-09-30
    • 2020-04-21
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    相关资源
    最近更新 更多