redis client 2.0.0 pipeline 的list的rpop bug
Posted wzjhoutai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis client 2.0.0 pipeline 的list的rpop bug相关的知识,希望对你有一定的参考价值。
描写叙述:
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以上版本号
以上是关于redis client 2.0.0 pipeline 的list的rpop bug的主要内容,如果未能解决你的问题,请参考以下文章