使用Jedis如何缓存Java对象

14

如何使用 Redis Java 客户端 Jedis 缓存 Java 对象?


使用您喜欢的序列化工具,例如Kryo或JSON进行序列化。 - zenbeni
我认为我的问题已经在这个帖子中得到了回答。 - DP Dev
3个回答

19

你应该将对象转换为 JSON 字符串以存储它,然后读取 JSON 并将其转换回对象。

你可以使用 Gson 来实现这一点。

//store
Gson gson = new Gson();
String json = gson.toJson(myObject);
jedis.set(key,json);

//restore
String json = jedis.get(key);
MyObject object=gson.fromJson(json, MyObject.class);

3
这是在Redis中存储Java对象的最简单方法。你真棒! - Srini

5

你不能直接将对象存储到Redis中。因此,将对象转换为字符串,然后将其放入Redis中。为了做到这一点,您的对象必须被序列化。将对象转换为ByteArray并使用某种编码算法(例如base64编码),将其转换为字符串,然后存储在Redis中。在检索时,反转过程,使用解码算法(例如base64解码)将字符串转换为字节数组,然后将其转换为对象。


1
但是在Redis中这样做是否是推荐的做法? - DP Dev
如果你真的想把对象存储在Redis中,这是唯一的方法。你可以选择直接存储对象,或者将单个值拆分并存储为哈希表中的对象。 - Karthikeyan Gopall
2
这是一个好回答。但是你不一定需要转换成字符串。你可以将byte[]存储在Redis中,这将避免你进行字符串的转换。这篇关于将对象反序列化为byte[]的帖子不错,链接为https://dev59.com/d3E85IYBdhLWcg3wUByz。 - Madhav

5
我建议使用更方便的库来处理它:Redisson - 这是一个基于Java的Redis框架,相比Jedis有一些优势。
  1. 你不需要每次自己序列化/反序列化对象
  2. 你不需要自己管理连接
  3. 你可以异步地使用Redis
Redisson会代替你完成这些,并且还支持许多流行的编解码器,如 Jackson JSONAvroSmileCBORMsgPackKryoFSTLZ4SnappyJDK Serialization
RBucket<AnyObject> bucket = redisson.getBucket("anyObject");
// set an object
bucket.set(new AnyObject());
// get an object
AnyObject myObject = bucket.get();

1
请注意,这会为您的应用程序增加一层复杂性,因为在更改类签名后,Redisson将无法“按原样”检索序列化对象。 - JorgeGarza
@JorgeGarza,恐怕你误解了。Redisson支持大约10种编解码器。如果您使用JDK Serialization编解码器,那就不会有问题。您甚至可以编写自己的编解码器。你用的是哪种编解码器? - Nikita Koksharov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接