描述:
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();
}
}
}
//这个方法会造成redis qps无限上升 @Test public void testRedisPipelinePop(){ Jedis jedis = null; try{ List> result = new ArrayList >(); jedis = new Jedis("127.0.0.1",6379); Pipeline pipelined = jedis.pipelined(); for(int i=0;i<10;i++){ //System.out.println(i); Response rpop = pipelined.rpop("aa"); //System.out.println(rpop); result.add(rpop); } pipelined.sync(); //Response r = pipelined.bitcount("aa"); for (Response response : result) { System.out.println(response.get());//异常 } }catch(Exception e){ e.printStackTrace(); }finally{ if(jedis!=null){ jedis.disconnect(); } } }
解决方法:
使用redis-cli 2.1.0以上版本