在Redis中存储大型复杂java类对象的最佳方法?

时间:2017-06-20 16:03:34

标签: java redis redisson

在Redis中存储嵌套和复杂java对象的最佳方法是什么。我们的方式如下。

我们正在使用Redisson java客户端库进行Redis交互。请参阅以下代码:

{{1}}

同样地,我们使用get来从redis填充myObject,而不是put。

由于大尺寸数据存储在redis中,我们增加了超时,我们遇到了以下异常:

命令的执行超时:(EVAL)with params ...

请回答以下问题:

  1. 这是在Redis中放置大型复杂Java对象的最佳方法吗? (数据可以是1GB左右)
  2. 我们的团队是Redis的新成员,我们已经阅读了Redis给出的良好性能,我们是否应该使用它来存储复杂的数据,或者仅在小的单个String作为值的情况下才有用? (如果是,我们的用例是什么建议)
  3. 感谢。

1 个答案:

答案 0 :(得分:2)

我认为你的问题实际上是两个问题:复杂的对象和巨大的对象。

所以,让我分解一下,逐一谈论它们:

  1. 对于复杂的Java对象问题,您可以将其及其嵌套的自定义类型转换为Redisson Live Objects。它的工作原理是将类的所有字段映射到Redis哈希。它还以与Java相同的方式处理对象引用,前提是它也是Redisson对象或Live对象。当您调用myObject.getField1()时,如果只从Redis中获取一个字段而不是整个对象,如示例中所示。
  2. DZone上有两篇文章可以帮助您更多地了解Redisson Live Object:Introducing Redisson Live Objects (Object Hash Mapping)(由我自己编写)和A Look at the Java Distributed In-Memory Data Model (Powered by Redis)(由Nikita Koksharov编写)

    1. 对于巨大的对象问题,如果巨大的对象是由类中的一个或几个字段组成的,则是一个大的不可破坏的对象,如字节数组,图像或大文件。您可以将每个字段转换为Redisson二进制流。您可以从中读取或以块的形式写入,而无需担心超时或阻止Redis服务。
    2. Redisson二进制流是通过将数据映射到Redis字符串对象来实现的,并且在必要时将数据拆分为块。您可以在项目维基页面找到Redisson二进制流的用法。