在Redis中存储Java对象列表的最佳方法

时间:2015-03-09 04:24:24

标签: java redis key-value jedis

如果有人可以建议我在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作为缓存)

3 个答案:

答案 0 :(得分:7)

如果您不需要查询存储在redis中的java对象(索引,分数......),那么您可以将它们序列化为带有库的字节数组(例如Kryo)并将它们存储在redis中的String中。请注意,您可以在一个redis字符串中序列化整个java对象集合,只需记住要反序列化的类(集合类型+对象类型),例如,可以为此目的定义一个聪明的键名。 / p>

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

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

答案 1 :(得分:3)

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

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

获取哈希调用的所有内容HGETALL student:1
你也可以用HGET获得Hashes的单个值 示例HGET学生:1个名字

答案 2 :(得分:2)

您可以使用Redisson轻松完成此操作。它是基于Redis的Java框架,支持许多流行的编解码器(Jackson JSON,Avro,Smile,CBOR,MsgPack,Kryo,FST,LZ4,Snappy) 和JDK Serialization)和Redis连接模式,如Cluster,Sentinel,AWS Elasticache。

以下是如何将Java对象存储到列表的示例:

thisConfig

RList<SomeObject> list = redisson.getList("anyList"); list.add(new SomeObject(1)); list.add(new SomeObject(2)); 接口还实现了RList接口。很简单吧?