jedis 报错 Attempting to read from a broken connection
排查原因,可能是线程并发导致的报错
解决:添加同步代码块
@Override public List<HsData> queryByPipeline(List<String> keys) { List<HsData> hsDatas = new ArrayList<>(); //boolean result = false; boolean borroworoprsuccess = true; try { synchronized (this) { if (null==jedisNew){ jedisNew = JedisPoolUtil.getJedis();//jedisPool.getResource();//换成了jedis连接池的方式 } Pipeline pipeline=jedisNew.pipelined(); List<Response<String>> responses = new ArrayList<>(); for (String key:keys) { Response<String> string = pipeline.get(key); responses.add(string); } pipeline.sync(); pipeline.close(); //jedis.close(); for (Response<String> stringResponse:responses){ if (null!=stringResponse.get()) { hsDatas.add(JSONObject.toJavaObject(JSONObject.parseObject(stringResponse.get()), HsData.class)); } } } LOGGER.info("======>:jedis调用完成一次=========>"); return hsDatas; } catch (Exception ex){ //如果jedis报错就重新创建jedis JEDISESTIME=true; //释放redis对象 jedisNew.close(); // ex.printStackTrace(); LOGGER.info("======>:jedis报错"+ex.getMessage()); //jedis.close(); }finally { JedisPoolUtil.returnResource(jedisPool,jedisNew,JEDISESTIME); } return hsDatas; }
重新创建jedis
/*** <p>Description: 返回资源 </p> * @author wenquan * @date 2017年1月5日 * @param */ public static void returnResource(JedisPool pool, Jedis jedisNew,Boolean JEDISESTIME) { if(JEDISESTIME){ jedisNew.close(); LOGGER.info("==================>初始化jedisPool"); JedisPoolUtil.initJedisPool(); } }