20

I'm using Jedis as the java client to connect to Redis Servers.

Question 1: It seems there is no method to get/set Object < ? extends Serializable> ? All the values must be String or byte[]?

Other clients like "JRedis" and Spymemcache(for memcached Server) could.

Question 2: If I use ShardedJedis, it cannot set auth/password? While Jedis class can (using auth(String password)).

hongtium
  • 465
  • 1
  • 3
  • 8

2 Answers2

17

Regard Question 1: Jedis won't handle POJOs. You should serialize to a string or byte[] and use jedis to do that, although I won't recommend to store your java objects serialized, as you won't be able to use all Redis cool features. A different approach would be to use something like a object-hash mapper, like JOhm.

Regard Question 2: ShardedJedis will only support commands that run on a single key. This is to guarantee atomicity. If you want to run a specific command on a specific redis you should use shardedJedis.getShard('someky') which will return a Jedis instance that you can use. Another way to handle this, the recommended one, is to specify your password in the JedisShardInfo instances. You can see and example of this in the tests.

xetorthio
  • 1,304
  • 10
  • 9
  • 6
    @xertorthio: Thanks for sharing the link for JOhm project, certain looks interesting! However, when you mention "I won't recommend to store your java objects serialized, as you won't be able to use all Redis cool features" which other Redis cool features are you referring to? – Nishant Kelkar Jan 28 '15 at 00:21
  • @Nishant I guess he meant stuff like INCR to do atomic changes to you data. – Tim Bartsch Jun 30 '15 at 14:18
  • seems that johm project is not active. here is an active fork of that project: [johm](https://github.com/agrison/johm) – WorM Aug 24 '16 at 14:29
5

Answer to question 1:

Redisson (Redis Java client) can work with POJO objects. And you don't need to serialize/deserialize object by yourself each time and work with connections (acquire/release). It's all done by the Redisson.

Here is an example:

RBucket<AnyObject> bucket = redisson.getBucket("anyObject");
// set an object
bucket.set(new AnyObject());
// get an object
AnyObject myObject = bucket.get();

or you can use LiveObjectService which stores POJO fields as keys in Redis hash object.

@REntity
public class MyObject {

   @RId
   private String id;
   @RIndex
   private String value;
   private MyObject parent;

   public MyObject(String id) {
       this.id = id;
   }

   public MyObject() {
   }

   // getters and setters

}

Redisson supports many popular codecs like Jackson JSON, Avro, Smile, CBOR, MsgPack, Kryo, FST, LZ4, Snappy and JDK Serialization.

Nikita Koksharov
  • 10,283
  • 1
  • 62
  • 71