0
public class JedisPipeline {
    private static JedisPool pool = new JedisPool(new JedisPoolConfig(), "127.0.0.1", 6379);
    public static void main(String args[]){

        Jedis jedis = pool.getResource();
        Pipeline pipeline = jedis.pipelined();
        pipeline.multi();
        //pipeline.hmset("Id", new HashMap<String,String>() );
        for(int i=0; i < 1000 ; i++){
            pipeline.hincrBy("Id", i+"", i);
        }
        pipeline.exec();
        pool.returnResource(jedis);
        //pool.destroy();

        //pool = new JedisPool(new JedisPoolConfig(), "127.0.0.1", 6379);
        jedis = pool.getResource();
        Map<String,String> map1 = jedis.hgetAll("Id");
        System.out.println("map1------->"+map1);
        pool.returnResource(jedis);
        //pool.destroy();


    }
}

I have a problem in the above code. It throws a ClassCastException, where as if I destroy the pool and create a new pool object it works properly. Am I using the Pipeline API properly ?. Can anyone help me ? I am using Jedis 2.1.0

Exception in thread "main" java.lang.ClassCastException: [B cannot be cast to java.util.List
    at redis.clients.jedis.Connection.getBinaryMultiBulkReply(Connection.java:189)
    at redis.clients.jedis.Jedis.hgetAll(Jedis.java:861)
    at com.work.jedisex.JedisFactory.main(JedisFactory.java:59)

Modified code to get the Map which throws Exception

Response<Map<String,String>> map1 = pipeline.hgetAll("Id");
pipeline.exec();
pipeline.sync();
pool.returnResource(jedis);
Map<String,String> map2 = map1.get();
user1182253
  • 1,079
  • 2
  • 14
  • 26

1 Answers1

1

Looks like the pipeline doesn't close after exec() call. So when you try to reuse the same Jedis object after returnResource it still contains pipelinedResponses from previous operation.

Try to do this way:

    pipeline.exec();
    pipeline.sync();
    pool.returnResource(jedis);

sync() call should close the pipeline.

Maxim Kolesnikov
  • 5,075
  • 6
  • 38
  • 68
  • Thank you, That worked !.However I have modified the code to get the Map as above. Still I get the same exception. could you able to find the problem in that code. – user1182253 Apr 22 '13 at 05:56