Redis 使用jedis如何缓存Java对象

Redis 使用jedis如何缓存Java对象,redis,jedis,Redis,Jedis,使用Redis Java client如何缓存Java对象?您不能将对象直接存储到Redis中。因此,将对象转换为字符串,然后将其放入Redis。 为此,必须序列化对象。将对象转换为ByteArray并使用一些编码算法(ex base64encoding),将其转换为字符串,然后存储在Redis中。 在检索过程中,使用解码算法(例如:base64decoding)将字符串转换为字节数组并将其转换为对象。您应该将对象转换为json字符串以存储它,然后读取json并将其转换回您的对象 您可以使用Gs

使用Redis Java client
如何缓存Java对象?

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

您应该将对象转换为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);

我建议使用更方便的lib来实现这一点:它是一个基于Redis的Java框架。 它比绝地武士有一些优势

  • 您不需要每次自己序列化/反序列化对象
  • 您不需要自己管理连接
  • 您可以异步使用Redis
  • Redisson为你做这件事,甚至更多。它支持许多流行的编解码器,如
    Jackson-JSON
    Avro
    Smile
    CBOR
    MsgPack
    Kryo
    FST
    LZ4
    Snappy
    JDK序列化

    RBucket<AnyObject> bucket = redisson.getBucket("anyObject");
    // set an object
    bucket.set(new AnyObject());
    // get an object
    AnyObject myObject = bucket.get();
    
    RBucket bucket=redisson.getBucket(“anyObject”);
    //设置对象
    set(newanyobject());
    //得到一个物体
    AnyObject myObject=bucket.get();
    
    例如,使用您最喜欢的封送器、kryo或json对其进行序列化。我想我的问题已经在这个线程中得到了回答。但是,这是对Redis的推荐做法吗?如果你真的想在Redis中存储对象,这是唯一的方法。你可以直接存储对象,或者将对象中的各个值拆分并存储为散列或其他形式。这是一个很好的答案。但您不一定需要转换为字符串。您可以将字节[]存储在Redis中,这样可以避免转换为字符串。关于将对象反序列化为字节[]的好文章这是在Redis中存储Java对象的最简单方法。。你太棒了!!!请注意,这会为您的应用程序增加一层复杂性,因为更改您的类别签名后,Redisson将无法“按原样”检索序列化对象@JorgeGarza,恐怕您弄错了。Redisson支持大约10个编解码器。例如,如果您使用JDK序列化编解码器,就不会有问题。您甚至可以编写自己的编解码器。你使用哪种编解码器?