2012-09-05 6 views
15

Ich benutze Jedis als Java-Client, um eine Verbindung zu Redis-Servern herzustellen.Kann Jedis ein Java POJO bekommen/setzen?

Frage 1: Es scheint, gibt es keine Methode zu erhalten/setzen Objekt <? erweitert Serialisierbar>? Alle Werte müssen String oder Byte [] sein?

Andere Clients wie "JRedis" und Spymemcache (für memcached Server) könnten.

Frage 2: Wenn ich ShardedJedis benutze, kann es nicht auth/password setzen? Während Jedis-Klasse kann (mit Auth (String-Passwort)).

Antwort

14

Regard Frage 1: Jedis wird nicht mit POJOs. Sie sollten zu einer Zeichenkette oder einem Byte [] serialisieren und Jedis dazu verwenden, obwohl ich nicht empfehlen werde, Ihre Java-Objekte serialisiert zu speichern, da Sie nicht alle Redis Cool-Funktionen verwenden können. Ein anderer Ansatz wäre die Verwendung eines Objekt-Hash-Mappers wie JOhm.

Regard Frage 2: ShardedJedis unterstützt nur Befehle, die auf einem einzigen Schlüssel ausgeführt werden. Dies soll die Atomarität garantieren. Wenn Sie einen bestimmten Befehl für einen bestimmten Redis-Befehl ausführen möchten, sollten Sie shardedJedis.getShard('someky') verwenden, der eine Jedis Instanz zurückgibt, die Sie verwenden können. Eine andere Möglichkeit, dies zu umgehen, ist die empfohlene, Ihr Kennwort in den Instanzen JedisShardInfo anzugeben. Sie können sehen und Beispiel dafür in der tests.

+5

@xertorthio: Danke für die Freigabe des Links für JOHM-Projekt, bestimmte sieht interessant aus! Wenn Sie jedoch erwähnen, "Ich werde nicht empfehlen, Ihre Java-Objekte serialisiert zu speichern, da Sie nicht in der Lage sein werden, alle Redis-Funktionen zu verwenden", auf welche anderen Redis-Funktionen beziehen Sie sich? –

+0

@Nishant Ich denke, er meinte Sachen wie INCR, um atomare Änderungen an Ihren Daten vorzunehmen. –

+0

scheint, dass Johannes Projekt nicht aktiv ist. Hier ist eine aktive Gabel dieses Projekts: [Johannes] (https://github.com/agrison/johm) – WorM

3

Antwort auf Frage 1:

Redisson (Redis basiertes Framework für Java) mit POJO Objekte arbeiten können. Und Sie müssen jedes Objekt nicht jedes Mal selbst serialisieren/deserialisieren und mit Verbindungen arbeiten (erwerben/freigeben). Alles wird vom Redisson erledigt.

Hier ist Beispiel:

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

oder Sie können LiveObjectService verwenden.

redisson unterstützt viele gängige Codecs wie Jackson JSON, Avro, Smile, CBOR, MsgPack, Kryo, FST, LZ4, Snappy und JDK Serialization.