Search code examples
javaredisjedis

Configure Jedis timeout


I'm having problems completing an .hgetall(), here's what I've tried:

Jedis jedis = new Jedis(REDIS_MASTER_NODE);
jedis.connect();
jedis.configSet("timeout", "30");

Map<String, String> alreadyStored = jedis.hgetAll(redisTargetHash);

and here's what I get:

Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out
    at redis.clients.jedis.Protocol.process(Protocol.java:79)
    at redis.clients.jedis.Protocol.read(Protocol.java:131)
    at redis.clients.jedis.Connection.getBinaryMultiBulkReply(Connection.java:199)
    at redis.clients.jedis.Jedis.hgetAll(Jedis.java:851)

This solved the issue:

Jedis jedis = new Jedis(REDIS_MASTER_NODE, 6379, 1800);

Solution

  • If what you want to do is set Jedis connection timeout, you should do it using the special constructor made for that:

    public Jedis(final String host, final int port, final int timeout)
    

    What you are doing is setting the timeout on Redis settings from Jedis. Doing CONFIG SET timeout 60, means that Redis will close idle client connections after 60 seconds. That's why you get the exception in Jedis.