簡體   English   中英

傑迪斯:斷管

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM