[英]Jedis: Broken Pipe
因此,我有2個使用jedis的應用程序。 它們都連接到同一服務器,並且一個監聽發布以檢查是否寫入了某些內容。 好吧,經過大約10個小時的持續使用和加載,設置/獲取/發布/主題,jedis返回了Broken Pipe。 我不知道為什么,因為我在Jedis中將超時設置為0。 有任何想法嗎?
根據我的發現,Jedis保持與Redis的開放連接,並且不檢查這些連接的狀態。 如果在空閑時間(網絡重置或暫時斷開連接或連接超時)期間中斷了連接,Jedis連接池將基本變為無效,但是Jedis客戶端將不會報告該問題,除非您嘗試通過管道發送命令。 這是在github上的討論: https : //github.com/xetorthio/jedis/issues/185
解決此問題的方法是在發送任何數據之前發送“ ping”:
private Jedis getResource() {
Jedis jedis;
try{
jedis = pool.getResource();
jedis.ping();
} catch (JedisException e) {
pool.destroy();
pool = getPool(this.url);
jedis = pool.getResource();
}
return jedis;
}
public String get(EphemeralKey key, EphemeralLocation location) throws Exception {
String encodedKey = encodeKey(key, location);
try (Jedis jedis = getResource()) {
return jedis.get(encodedKey);
} catch (JedisException e) {
throw wrapJedisException(e);
}
return null;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.