Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 配置绝地超时_Java_Redis_Jedis - Fatal编程技术网

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

需要考虑的几点:

  • 对于绝地和绝地职业来说,超时时间都是以毫秒为单位的。 默认超时,至少在2.5.1中是2000(毫秒):
    int redis.clients.jedis.Protocol.Default\u timeout=2000[0x7d0]

  • 根据文档,Redis 2.6或更高版本不会关闭连接,即使客户端处于空闲状态。我还没有证实这一点,我会尝试更新后,我这样做


  • 超时的单位是什么?比如,是秒还是毫秒?@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);