redis维护问题总结
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
1?redis?client連接超時(shí)
在用jedis客戶端對redis進(jìn)行壓力測試時(shí),經(jīng)常會出現(xiàn)下述錯誤:
Exception?in?thread?"Thread-565"?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.getStatusCodeReply(Connection.java:162)
????????at?redis.clients.jedis.BinaryClient.connect(BinaryClient.java:76)
????????at?redis.clients.jedis.Connection.sendCommand(Connection.java:79)
????????at?redis.clients.jedis.BinaryClient.select(BinaryClient.java:148)
????????at?redis.clients.jedis.Jedis.select(Jedis.java:328)
????????at?RedisThread.run(RedisThread.java:15)
????????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
從中可以看出,出錯的原因是線程等待超時(shí),斷開連接,所以可以通過手動設(shè)置超時(shí)時(shí)間來避免這個錯誤。查詢Jedis構(gòu)造函數(shù),可以發(fā)現(xiàn)其中一個構(gòu)造函數(shù)如下,可以在其中指出客戶端等待的超時(shí)時(shí)間:
public?Jedis(final?String?host,?final?int?port,?final?int?timeout)?{
super(host,?port,?timeout);
}
在Jedis對象創(chuàng)建時(shí),在構(gòu)造函數(shù)中按照實(shí)際需求設(shè)置timeout的大小可以避免上述錯誤的出現(xiàn)。
轉(zhuǎn)載于:https://my.oschina.net/u/1169607/blog/348687
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的redis维护问题总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux终端乱码的解决办法
- 下一篇: maven 加入json-lib.jar