【问题标题】:Using jedis How to cache Java object使用 jedis 如何缓存 Java 对象
【发布时间】:2015-07-27 00:13:13
【问题描述】:

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

【问题讨论】:

标签: java redis jedis


【解决方案1】:

您应该将您的对象转换为 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 中存储 Java 对象的最简单方法。你太棒了!!!
【解决方案2】:

您不能将对象直接存储到 redis 中。所以将对象转换成String,然后放到Redis中。 为此,您的对象必须被序列化。将对象转换为 ByteArray 并使用一些编码算法(例如 base64encoding)并将其转换为字符串,然后存储在 Redis 中。 在检索反向过程时,使用解码算法(例如:base64decoding)将字符串转换为字节数组并将其转换为对象。

【讨论】:

  • 但是这是推荐使用 Redis 的做法吗?
  • 如果你真的想将对象存储在 Redis 中,这是唯一的方法。您可以直接存储对象,也可以将对象中的各个值拆分并存储为哈希或其他内容。
  • 这是一个很好的答案。但是你不一定需要转换成String。您可以将 byte[] 存储在 Redis 中,这将使您免于转换为 String 或从 String 转换为 String。关于将对象反序列化为 byte[] stackoverflow.com/questions/2836646/… 的好帖子
【解决方案3】:

我建议使用更方便的 lib 来完成此操作:Redisson - 这是一个基于 Redis 的 Java 框架。 它比 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();

【讨论】:

  • 当心这会增加您应用程序的复杂性,因为在更改您的类签名后,Redisson 将无法“按原样”检索序列化对象
  • @JorgeGarza 恐怕你弄错了。 Redisson 支持大约 10 种编解码器。例如,如果您使用 JDK 序列化编解码器,则不会有问题。您甚至可以编写自己的编解码器。您使用哪种编解码器?
猜你喜欢
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
  • 2011-01-10
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多