【问题标题】:Jedis pool configuration for get and set/flush operations用于获取和设置/刷新操作的 Jedis 池配置
【发布时间】:2017-10-12 11:54:51
【问题描述】:

我是 redis 新手,在我的应用程序中使用 Jedis 客户端。我经历了几个线程并没有找到确凿的答案。

我有 2 个问题需要澄清。

  1. 对于我的生产用途,我想为绝地获取操作和设置操作设置单独的超时。对于所有设置操作,我想将超时设置为 2000 毫秒并获得 100 毫秒。我已经实现了以下配置。

    JedisPoolConfig poolConfig = new JedisPoolConfig();
    poolConfig.setMaxIdle(30);
    poolConfig.setMinIdle(10);
    poolConfig.setMaxWaitMillis(2000);
    jedisPool = new JedisPool(poolConfig, RedisDBUrl, port, 100);
    

    让我知道上述配置是否可以完成这项工作。我将读取超时设置为 100 毫秒,将 maxwait 设置为 2000 毫秒。

  2. 如果我的理解正确,请告诉我。

    有时我得到 JedisConnectionException: java.net.SocketTimeoutException: Read timed out 或有时 connect timeout

    当我的应用程序无法在配置的时间内连接到 redis 时,这里会抛出连接超时?

    其次,当应用程序连接到redis但操作(get/set)需要时间或出于某种原因时,会出现读取超时?

    最后,如何配置读取超时和连接超时?

【问题讨论】:

    标签: redis jedis


    【解决方案1】:

    经过多次尝试和一些测试运行发现,您不能为jedis get和set操作设置单独的超时。 也许你可以使用一些外部库来实现(比如谷歌的 SimpleTimeLimiter。

    据我观察,当 jedis 尝试连接到 redis 服务器时,会发生连接超时。在我的情况下,我系统的 redis 服务器延迟约为 120-125 毫秒,所以如果我在 jedis 构造函数中设置 timeout=100 毫秒,我会得到“连接超时”。

    当您连接到 redis 服务器但 redis 操作未在指定时间内返回时,会出现“读取超时”。为了测试这个场景,我将构造函数中的超时设置为 180 毫秒并尝试运行 flushall 操作(需要很长时间),这里我得到了读取超时。

    仍然不确定 poolConfig.setMaxWaitMillis() 的意义是什么。

    【讨论】:

    • 'poolConfig.setMaxWaitMillis()'是从jedispool获取资源的最大等待时间,超过这个时间'jedispool.getResource()'会给出'connection timeout'异常。
    猜你喜欢
    • 2012-08-30
    • 2015-09-09
    • 2013-02-06
    • 2021-05-24
    • 2018-11-27
    • 2023-03-24
    • 1970-01-01
    • 2011-02-08
    • 2016-07-22
    相关资源
    最近更新 更多