使用Kryo将HashMap序列化为Redis

时间:2016-04-12 15:09:20

标签: java redis kryo

我正在尝试Kryo serlization如何工作。我有一个非常大的HashMap,我想将其推入Redis。 HashMap是:

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)

但我对使用OutputRedis应该是什么感到困惑。

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

但这对我来说似乎效率低下,因为我有效地克隆了#34;我的大缓存变成了一个字节数组。

这个问题的有效方法是什么?

1 个答案:

答案 0 :(得分:0)

AFAIK Kryo没有Redis输出。 Jedis只有byte[]String API,因此您无法使用包装/池化缓冲区。

使用Kryo已经可以使用redisson,因为它们提供了使用ByteBuffer s的Kryo编解码器。或者,您也可以使用lettuce这是一个低级Redis驱动程序,同时使用ByteBuffer提供codec API