用于get和set / flush操作的Jedis池配置

时间:2017-05-13 06:29:22

标签: redis jedis

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

我有两个问题需要明确。

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

    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:读取超时或有时连接超时

    如果我的应用程序无法在配置的时间内连接到redis,则抛出连接超时?

    其次,当应用程序连接到redis但是操作(获取/设置)花费时间或出于某种原因时会出现读取超时?

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

1 个答案:

答案 0 :(得分:0)

经过多次点击和试用并发现一些测试运行后,您无法为jedis get和set操作设置单独的超时。 也许你可以使用一些外部库来实现(就像google的SimpleTimeLimiter。

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

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

仍然不确定poolConfig.setMaxWaitMillis()的重要性。