skip to Main Content

Looking at the Jedis Getting Started, I understand it’s better to use connection pools to be threadsafe. To do so, I would need a JedisPool and a try-with-resources statement like so:

try (Jedis jedis = pool.getResource()) {
  jedis.set("hello", "world");
}

But then there’s JedisPooled, which is the same as JedisPool just without the try-with-resources.

JedisPooled jedis = new JedisPooled("localhost", 6379);
jedis.sadd("hellow", "world");

So the question is, is there any other difference between JedisPool/Pooled, and why should I prefer JedisPool over JedisPooled (or vice versa)?

2

Answers


  1. With JedisPool you can do transactions, e.g., something like this:

    try (Jedis jedis = pool.getResource()) {
      Transaction t = jedis.multi();
      t.sadd("planets", "Venus");
      t.sadd("planets", "Mars");
      t.exec();
    }
    

    It doesn’t seem like you can do anything similar with JedisPooled.

    Probably, there’s more to that, but that’s what I’ve stumbled on by myself.

    Hope that helps!

    Login or Signup to reply.
  2. My understanding is that each command in JedisPooled

    JedisPooled jedis = new JedisPooled("localhost", 6379);
    jedis.sadd("hellow", "world");//fetch and release the resource
    jedis.sadd("hellow", "what");//fetch and release the resource
    

    will get the resource from the pool and release the resource into the pool without having to do try-with-resources.
    JedisPool needs explicit try-with-resources

    JedisPool pool = new JedisPool("localhost", 6379);
    try (Jedis jedis = pool.getResource()) {
        jedis.set("foo", "bar"); // jedis resource is used
        System.out.println(jedis.get("foo")); // same jedis resource is used
    }//here resource is released
    

    REF : https://redis.io/docs/clients/java/

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search