2016-04-12 13 views
2

Kryo serileştirme işleminin nasıl yapıldığına çalışıyorum. Ben Redis içine itmek istiyorum çok büyük bir HashMap var. HashMap geçerli:HashMap'i Kryis ile Kümeleştirin Kryo'nun Kullanılması

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

Redis içinde seri hale getirmek en hızlı yolu nedir?

Seçenek 1: Doğrudan Redis'e mi?

seni gibi Kryo kullanabilirsiniz görüyoruz:

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

Ama Redis kullanırken Output ne olması gerektiği konusunda karıştı.

Seçenek 2: Bayt dizisiyle mi?

Ben de belki mümkün aşağıdaki gördük:

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); 

Ama etkili bir olduğum gibi bu bir bayt dizisi benim büyük önbellek "klonlama" Bana verimsiz görünmektedir.

Bu sorun için etkili bir yaklaşım nedir?

cevap

0

AFAIK, Kryo için Redis çıkışı yok. Jedis yalnızca byte[] ve String API'lerine sahiptir, böylece sarılmış/havuzlanmış arabellekleri kullanamazsınız.

ByteBuffer s kullanan bir Kryo codec sağladıkları için, Kryo kullanmak redisson ile zaten mümkündür. Alternatif olarak, ByteBuffer kullanarak codec API sağlayan bir düşük düzey Redis sürücüsü olan lettuce kullanabilirsiniz.

İlgili konular