Configure Jedis timeout

dranxo picture dranxo · Feb 21, 2013 · Viewed 56.9k times · Source

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);

Answer

xetorthio picture xetorthio · Feb 21, 2013

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.