我是redis的新手,在我的应用程序中使用Jedis客户端。我已经完成了几个主题,并没有找到确凿的答案。
我有两个问题需要明确。
对于我的生产用途,我想为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毫秒。
如果我的理解是正确的,请告诉我。
有时我会收到JedisConnectionException:java.net.SocketTimeoutException:读取超时或有时连接超时。
如果我的应用程序无法在配置的时间内连接到redis,则抛出连接超时?
其次,当应用程序连接到redis但是操作(获取/设置)花费时间或出于某种原因时会出现读取超时?
最后,如何为读取超时和连接超时配置超时?
答案 0 :(得分:0)
经过多次点击和试用并发现一些测试运行后,您无法为jedis get和set操作设置单独的超时。 也许你可以使用一些外部库来实现(就像google的SimpleTimeLimiter。
根据我观察到的情况,当jedis尝试连接到redis服务器时,会发生连接超时。在我的情况下,我的系统的redis服务器延迟大约是120-125ms所以如果我在jedis构造函数中设置timeout = 100ms,我会得到“连接超时”。
当您连接到redis服务器但是redis操作未在指定时间内返回时,会出现“read time out”。为了测试这种情况,我将构造函数中的超时设置为180ms并尝试运行flushall操作(需要很长时间),这里我读取超时。
仍然不确定poolConfig.setMaxWaitMillis()的重要性。