【问题标题】:Best way to store a list of java objects in Redis在 Redis 中存储 Java 对象列表的最佳方法
【发布时间】:2015-05-10 05:01:16
【问题描述】:

如果有人能建议我在 Redis 中存储 Java 对象列表的最佳方式,那就太好了。

目前,我正在将 java 对象转换为 json 字符串并将这些字符串存储在 Redis 中,并且我在 Redis 中有一个集合来跟踪所有这些。

例如:-

SET student:1 '{"name":"testOne","stream":computer science}'
SET student:2 '{"name":"testTwo","stream":electronics}'
SADD students 1
SADD students 2

因此,当我想获取学生列表时,我首先获取集合 students,然后对其进行迭代并获取这些键处的 json 字符串。

只是想知道是否有任何其他更好的方法来处理将 Java 对象列表存储到 Redis 的场景。

(我使用redis作为缓存)

【问题讨论】:

    标签: java redis key-value jedis


    【解决方案1】:

    如果您不需要查询存储在 redis 中的 java 对象(索引、分数...),那么您可以使用库(例如 Kryo)将它们序列化为字节数组并将它们存储在 redis 中的字符串中.请注意,您可以在一个 redis 字符串中序列化整个 Java 对象集合,只需记住要反序列化时它是哪个类(集合类型 + 对象类型),例如,您可以为此目的定义一个巧妙的键名。

    JSON 将比其他二进制编组格式使用更多空间并且网络密集度更高,如果您不需要在 redis 中查询或人类可读数据,那么将二进制数据存储在 redis 中就可以(并且性能更高) .

    请注意,如果您使用的是 jedis 库(如您所标记的那样),那么您在 Jedis 上的方法将字节数组作为参数而不是 Java 字符串,以便将数据作为 C 字符串发送到 Redis(在此过程中不会丢失数据) .

    【讨论】:

    • 如果我想用分数查询存储在Redis中的Java对象怎么办?
    【解决方案2】:

    Redis 不仅仅是一个简单的键值存储。你可以使用哈希在redis中存储结构化数据

    HMSET 学生:1 名“testOne”流“计算机科学” http://redis.io/commands/hmset

    获取哈希调用的所有内容 HGETALL student:1
    您还可以使用 HGET 获取单个哈希值
    示例 HGET 学生:1 个姓名

    【讨论】:

    • 我实际上是在寻找存储 java 对象的列表并在需要时检索它们。此外,我想尽量减少检索列表的查询数量,因此我选择使用 json 字符串来存储对象,这让我可以使用 MGET 并一次性获取所有键。如果我使用哈希来存储我的 java 对象,我无法一次性获取 java 对象列表的所有元素。
    • 如果你想存储它们不是有序的,你可以使用 SET 来存储散列的键。您可以使用 LUA 脚本一次性检索它们 您的方法存在的问题: - 更新和删除只能在客户端进行。 ->糟糕的多用户支持
    【解决方案3】:

    您可以使用Redisson 轻松做到这一点。它是一个基于 Redis 的 Java 框架,支持许多流行的编解码器(Jackson JSON、Avro、Smile、CBOR、MsgPack、Kryo、FST、LZ4、Snappy 和 JDK 序列化)和 Redis 连接模式,如 Cluster、Sentinel、AWS Elasticache。

    这是一个如何将 Java 对象存储到列表的示例:

    RList<SomeObject> list = redisson.getList("anyList");
    list.add(new SomeObject(1));
    list.add(new SomeObject(2));
    

    RList 接口也实现了java.util.List 接口。很简单,对吧?

    【讨论】:

    • 如果key有元素,则所有元素都会存入内存。
    猜你喜欢
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 2014-06-29
    • 2020-03-25
    • 1970-01-01
    • 2018-06-27
    • 2010-11-30
    • 2021-11-30
    相关资源
    最近更新 更多