2016-04-12 86 views
2

我試圖根據Kryo serlization如何工作。我有一個非常大的HashMap,我想推入Redis。 HashMap是:使用Kryo將HashMap序列化到Redis

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

什麼是序列化成Redis的最快方法?

選項1:直接進入Redis?

我看到,你可以使用Kryo像:

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

但我很困惑,使用Redis當什麼Output應。

選項2:通過字節數組?

我也看到了,下面也許可能:

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

但這似乎效率不高我,我有效地「克隆」我的大緩存爲字節數組。

這個問題有效的方法是什麼?

回答

0

AFAIK Kryo沒有Redis輸出。 Jedis只有byte[]String API,因此您無法使用包裝/池化緩衝區。

使用Kryo可能已經與redisson,因爲他們提供了一個Kryo編解碼器,它使用ByteBuffer s。或者,您也可以使用lettuce這是一個低級Redis驅動程序,使用ByteBuffer也提供codec API