redis维护问题总结

redis client链接超时

在用jedis客户端对redis进行压力测试时,常常会出现下述错误:java

Exception in thread "Thread-565" redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed outredis

        at redis.clients.jedis.Protocol.process(Protocol.java:79)socket

        at redis.clients.jedis.Protocol.read(Protocol.java:131)函数

        at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:162)测试

        at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:76)spa

        at redis.clients.jedis.Connection.sendCommand(Connection.java:79).net

        at redis.clients.jedis.BinaryClient.select(BinaryClient.java:148)线程

        at redis.clients.jedis.Jedis.select(Jedis.java:328)对象

        at RedisThread.run(RedisThread.java:15)get

        at java.lang.Thread.run(Thread.java:679)

Caused by: java.net.SocketTimeoutException: Read timed out

        at java.net.SocketInputStream.socketRead0(Native Method)

        at java.net.SocketInputStream.read(SocketInputStream.java:146)

        at java.net.SocketInputStream.read(SocketInputStream.java:107)

        at redis.clients.util.RedisInputStream.fill(RedisInputStream.java:109)

        at redis.clients.util.RedisInputStream.readByte(RedisInputStream.java:45)

        at redis.clients.jedis.Protocol.process(Protocol.java:64)

        ... 8 more

从中能够看出,出错的缘由是线程等待超时,断开链接,因此能够经过手动设置超时时间来避免这个错误。查询Jedis构造函数,能够发现其中一个构造函数以下,能够在其中指出客户端等待的超时时间:

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

super(host, port, timeout);

}

Jedis对象建立时,在构造函数中按照实际需求设置timeout的大小能够避免上述错误的出现。

相关文章
相关标签/搜索