簡體   English   中英

Jedis 斷管異常

[英]Jedis broken pipe exception

我在servlet過濾器中使用Redis進行身份驗證,我沒有修改redis.conf

jedis = new Jedis("localhost");
String authToken = jedis.get(uid);

第 2 行拋出異常。

redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: Broken pipe
redis.clients.jedis.Connection.flush(Connection.java:291)
redis.clients.jedis.Connection.getBinaryBulkReply(Connection.java:214)
redis.clients.jedis.Connection.getBulkReply(Connection.java:205)
redis.clients.jedis.Jedis.get(Jedis.java:105)
filter.AuthFilter.doFilter(AuthFilter.java:38)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

連接似乎已重置/斷開連接。 當您使用長期連接時會發生這種情況(例如,在應用程序啟動時連接到 Redis,然后反復使用該連接)。

可能的解決方案是:

  1. 需要時使用JedisPool獲取連接,使用后返回
  2. 如果連接中斷,則重新連接(需要一些 try/catch 魔法以防止錯誤傳播到您的應用程序邏輯)
  3. 在您需要連接的那一刻連接,然后斷開連接

還有 Java Redis 客戶端提供透明的重新連接,這意味着您永遠不會看到套接字異常( lettuceredisson )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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