Java 配置绝地超时
我在完成Java 配置绝地超时,java,redis,jedis,Java,Redis,Jedis,我在完成.hgetall()时遇到问题,以下是我尝试的内容: Jedis jedis = new Jedis(REDIS_MASTER_NODE); jedis.connect(); jedis.configSet("timeout", "30"); Map<String, String> alreadyStored = jedis.hgetAll(redisTargetHash); 这解决了问题: Jedis jedis = new Jedis(REDIS_MASTER_NOD
.hgetall()
时遇到问题,以下是我尝试的内容:
Jedis jedis = new Jedis(REDIS_MASTER_NODE);
jedis.connect();
jedis.configSet("timeout", "30");
Map<String, String> alreadyStored = jedis.hgetAll(redisTargetHash);
这解决了问题:
Jedis jedis = new Jedis(REDIS_MASTER_NODE, 6379, 1800);
如果要设置Jedis connection
timeout
,则应使用专门为此而设计的构造函数:
public Jedis(final String host, final int port, final int timeout)
您所做的是从
jedis
设置redis设置的超时时间。执行CONFIG SET timeout 60
,意味着redis将在60
秒后关闭空闲的客户端连接。这就是为什么绝地武士会有例外。这是对塞托尔蒂奥答案的一点扩展,但这里有一个类似的方法用于绝地武士。(注意:这是基于我对Jedis 2.6.2版代码的理解,并没有在实际用例中进行测试。)
writeTimeout是池中的绝地资源等待写入操作的最长时间
为池构造函数指定的readTimeout是套接字读取的等待时间,有关详细信息,请参见
java.net.socket.setSoTimeout
。需要考虑的几点:
int redis.clients.jedis.Protocol.Default\u timeout=2000[0x7d0]
超时的单位是什么?比如,是秒还是毫秒?@xetorthio你能告诉我如何在绝地武士中指定查询超时吗?目前我使用的是
jedis-2.6.0.jar
请告诉我它们的默认值。根据我的理解,connectionTimeout
是新的连接建立超时。构造函数的超时参数以毫秒为单位,因为该值在java.net.Socket#connect(java.net.SocketAddress,int)和java.net.Socket#setotimeout(int)方法内部受到影响。所以这个值是连接和套接字读取超时。您是否有机会查看空闲时间超时后连接是否关闭?另外,我猜你是说绝地(不是Redis)不会关闭。默认情况下,是Redis 2.6及更高版本会打开客户端连接。绝地SpoolConfig从BaseGenericObject池继承maxWaitMillis,这只是从配置获取/借用对象的超时。我认为这与远程redismaxWaitMillis的writetimeout无关-:连接池资源耗尽时调用方的最大等待时间(以毫秒为单位)。
public Jedis(final String host, final int port, final int timeout)
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxWaitMillis(writeTimeout);
JedisPool pool = new JedisPool(jedisPoolConfig, redisHost, port, readTimeout);