Redis如何存储一个Java对象【内涵案例】

目录

Java原生序列化示例

GSON示例

使用fastjson存储Java对象到Redis时


Redis并不能直接存储Java对象,需要进行序列化或者转换成字符串等格式才可以进行存储。以下介绍两种常见的将Java对象存储到Redis的方案。

  1. 对象序列化,存储二进制数据

将对象进行序列化是将对象转换成二进制流,从而可以将这个二进制流存储到Redis中。Java内置了一套对象序列化机制,在java.io包中实现。常用的序列化方式有Java原生序列化、JSON、Protobuf等。

Java原生序列化示例

// 引入Redis依赖
import redis.clients.jedis.Jedis;

// 引入Java序列化依赖
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

// 定义序列化对象
class User implements Serializable {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

// 连接Redis
Jedis jedis = new Jedis("localhost", 6379);

// 序列化Java对象
User user = new User("johndoe", 30);
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream objOut = new ObjectOutputStream(byteOut);
objOut.writeObject(user);

// 存储到Redis
jedis.set("user", byteOut.toByteArray());

// 读取Redis中存储的数据并反序列化
byte[] val = jedis.get("user");
ObjectInputStream objIn = new ObjectInputStream(new ByteArrayInputStream(val));
User storedUser = (User)objIn.readObject();

2对象转换成字符串,存储字符串数据

将对象转换成字符串可以使用JSON等格式,将一个对象转换为JSON字符串后存储到Redis中。在Java中,可以使用GSON、Jackson等库将对象转换为JSON字符串。

GSON示例

// 引入Redis依赖
import redis.clients.jedis.Jedis;

// 引入Gson依赖
import com.google.gson.Gson;

// 定义对象
class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

// 连接Redis
Jedis jedis = new Jedis("localhost", 6379);

// 将Java对象转换为JSON字符串
User user = new User("johndoe", 30);
Gson gson = new Gson();
String json = gson.toJson(user);

// 存储到Redis
jedis.set("user", json);

// 读取Redis中存储的数据并将JSON字符串反序列化为Java对象
String val = jedis.get("user");
User storedUser = gson.fromJson(val, User.class);

上述代码中,将Java对象转换为JSON字符串可以使用Gson库的toJson方法,在存储到Redis中时和读取时都需要使用相应的方法进行序列化和反序列化。

使用fastjson存储Java对象到Redis时

可以按照以下步骤操作:

  1. 引入fastjson的依赖包。

  2. 定义一个Java对象,并使用fastjson序列化成JSON格式。例如:

User user = new User();
// 对User对象进行一些操作
String json = JSON.toJSONString(user);

3.将JSON格式的数据转换为byte[]类型,以便存储到Redis中。例如:

byte[] bytes = json.getBytes(Charset.forName("UTF-8"));

    4.使用Redis的客户端进行操作,将byte[]类型的数据存储到Redis中。例如:

Jedis jedis = new Jedis("localhost", 6379);
String key = "user_" + user.getId();
jedis.set(key.getBytes(Charset.forName("UTF-8")), bytes);

   5.在需要读取该Java对象时,从Redis中读取该二进制数据,再将其反序列化为Java对象。例如

byte[] bytes = jedis.get(key.getBytes(Charset.forName("UTF-8")));
String json = new String(bytes, Charset.forName("UTF-8"));
User user = JSON.parseObject(json, User.class);

 这里使用了Jedis客户端从Redis中读取该Java对象的二进制数据,并将其转化为JSON格式的字符串。最后,使用fastjson反序列化为Java对象。

总的来说,使用fastjson序列化Java对象存储到Redis中的过程如下:Java对象 -> JSON格式 -> byte[] -> Redis中的数据,读取时是反过来的过程:Redis中的数据 -> byte[] -> JSON格式 -> Java对象。

猜你喜欢

转载自blog.csdn.net/m0_64210833/article/details/130620727