杰迪破管异常

时间:2015-09-07 01:27:00

标签: java redis jedis

我在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)

2 个答案:

答案 0 :(得分:2)

连接似乎已重置/断开连接。当您使用长期连接时(例如,在应用程序启动时连接到Redis,然后反复使用连接),就会发生这种情况。

可能的解决方案是:

  1. 使用JedisPool在需要时获取连接并在使用后将其返回
  2. 如果连接断开则重新连接(需要一些try / catch魔法以防止错误传播到您的应用程序逻辑)
  3. 在您需要连接时连接并在之后断开连接
  4. 还有一些提供透明重新连接的Java Redis客户端意味着您无法看到套接字异常(lettuceredisson)。

答案 1 :(得分:0)

参考GET for Redis doc:

如果key中存储的值不是字符串,则返回错误,因为GET仅处理字符串值。

那么,uid是字符串类型吗?