2016-04-12 2 views
2

Ich versuche zu unter wie Kryo Serlisierung funktioniert. Ich habe eine sehr große HashMap, die ich in Redis schieben möchte. Die HashMap ist:Serialize HashMap in Redis mit Kryo

HashMap<String, HashMap<String, Set<Long>>> cache = new HashMap<>(); 

Was ist der schnellste Weg in Redis zu serialisiert?

Option 1: Direkt in Redis?

Ich sehe, dass Sie Kryo wie verwenden:

Kryo kryo = new Kryo(); 
kryo.register(HashMap.class); 
Output output = //For Redis what would the output be ? 
kryo. writeObject(output, cache) 

Aber ich bin verwirrt, was Output sein sollte, wenn Redis verwenden.

Option 2: Über ein Byte-Array?

habe ich auch, dass das vielleicht möglich folgendes gesehen:

mir
Jedis jedis = new Jedis("localhost"); 
Kryo kryo = new Kryo(); 
kryo.register(HashMap.class); 

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
Output output = new Output(stream); 
kryo.writeObject(output, cache); 
output.close(); 
byte[] buffer = stream.toByteArray(); 
jedis.set("Test", buffer); 

Aber das scheint ineffizient, da ich effektiv bin mein großen Cache in einen Byte-Array „Klonen“.

Was ist ein effizienter Ansatz für dieses Problem?

Antwort

0

AFAIK gibt es keinen Redis-Ausgang für Kryo. Jedis hat nur byte[] und String APIs, so dass Sie keine umschlossenen/gepoolten Puffer verwenden können.

Die Verwendung von Kryo ist bereits mit redisson möglich, da sie einen Kryo-Codec bieten, der ByteBuffer s verwendet. Alternativ können Sie auch verwenden, was ein Low-Level-Redis-Treiber ist, der auch codec API unter Verwendung von ByteBuffer bereitstellt.