在 Redis 中存储 java 对象列表的最佳方式

2022-09-04 02:36:47

如果有人能建议我什么是在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

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

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

(我使用 redis 作为缓存)


答案 1

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

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

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


答案 2

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

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

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