【发布时间】:2015-07-27 00:13:13
【问题描述】:
使用 Redis Java 客户端 Jedis
如何缓存 Java 对象?
【问题讨论】:
-
例如使用您最喜欢的编组器、kryo 或 json 对其进行序列化。
-
stackoverflow.com/questions/12279117/… 我想我的问题已经在这个帖子上得到了回答。
使用 Redis Java 客户端 Jedis
如何缓存 Java 对象?
【问题讨论】:
您应该将您的对象转换为 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);
【讨论】:
您不能将对象直接存储到 redis 中。所以将对象转换成String,然后放到Redis中。 为此,您的对象必须被序列化。将对象转换为 ByteArray 并使用一些编码算法(例如 base64encoding)并将其转换为字符串,然后存储在 Redis 中。 在检索反向过程时,使用解码算法(例如:base64decoding)将字符串转换为字节数组并将其转换为对象。
【讨论】:
我建议使用更方便的 lib 来完成此操作:Redisson - 这是一个基于 Redis 的 Java 框架。 它比 Jedis 有一些优势
Redisson 为您服务,甚至更多。它支持许多流行的编解码器,如Jackson JSON、Avro、Smile、CBOR、MsgPack、Kryo、FST、LZ4、Snappy 和JDK Serialization。
RBucket<AnyObject> bucket = redisson.getBucket("anyObject");
// set an object
bucket.set(new AnyObject());
// get an object
AnyObject myObject = bucket.get();
【讨论】: