码迷,mamicode.com
首页 > 其他好文 > 详细

redis client 2.0.0 pipeline 的list的rpop bug

时间:2017-07-01 16:19:27      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:line   sync   long   add   qps   tco   get   pos   jedis   

描写叙述:

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

标签:line   sync   long   add   qps   tco   get   pos   jedis   

原文地址:http://www.cnblogs.com/wzjhoutai/p/7102392.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!