使用jedis如何缓存Java对象

use*_*521 10 redis jedis

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

jeo*_*vre 10

您应该将对象转换为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);
Run Code Online (Sandbox Code Playgroud)

  • 这是在 Redis 中存储 Java 对象的最简单方法。你太棒了!!! (2认同)

Kar*_*all 5

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

  • 这是一个很好的答案。但你不一定需要转换成字符串。您可以将 byte[] 存储在 Redis 中,这将节省您与字符串之间的转换。关于将对象反序列化为字节[]的好文章http://stackoverflow.com/questions/2836646/java-serialized-object-to-byte-array (2认同)

Nik*_*rov 5

我建议使用更方便的库来做到这一点:Redisson - 它是一个基于 Redis 的 Java 框架。与Jedis相比,它有一些优势

  1. 您不需要每次都自己序列化/反序列化对象
  2. 您不需要自己管理连接
  3. 您可以异步使用 Redis

Redisson 会为您做到这一点,甚至更多。它支持许多流行的编解码器,例如Jackson JSONAvroSmileCBORMsgPackKryoFSTLZ4和。SnappyJDK Serialization

RBucket<AnyObject> bucket = redisson.getBucket("anyObject");
// set an object
bucket.set(new AnyObject());
// get an object
AnyObject myObject = bucket.get();
Run Code Online (Sandbox Code Playgroud)