描写叙述:
redis client 2.0.0 pipeline 的list的rpop 存在严重bug,rpop list的时候,假设list已经为空的时候,rpop出来的Response依旧不为null,导致吊response.get()方法抛异常
代码:
@Test public void testRedisPipeline(){ Jedis jedis = null; try{ jedis = new Jedis("127.0.0.1",6379); Pipeline pipelined = jedis.pipelined(); for(int i=200;i<10000;i++){ pipelined.lpush("aa", "val"+i); } pipelined.sync(); }catch(Exception e){ e.printStackTrace(); }finally{ if(jedis!=null){ jedis.disconnect(); } } }
<span style="white-space:pre"> </span>//这种方法会造成redis qps无限上升 @Test public void testRedisPipelinePop(){ Jedis jedis = null; try{ List<Response<String>> result = new ArrayList<Response<String>>(); jedis = new Jedis("127.0.0.1",6379); Pipeline pipelined = jedis.pipelined(); for(int i=0;i<10;i++){ //System.out.println(i); Response<String> rpop = pipelined.rpop("aa"); //System.out.println(rpop); result.add(rpop); } pipelined.sync(); //Response<Long> r = pipelined.bitcount("aa"); for (Response<String> response : result) { System.out.println(response.get());//异常 } }catch(Exception e){ e.printStackTrace(); }finally{ if(jedis!=null){ jedis.disconnect(); } } }
解决方法:
使用redis-cli 2.1.0以上版本号
时间: 2024-11-07 20:28:55