目录
Java原生序列化示例
GSON示例
使用fastjson存储Java对象到Redis时
Redis并不能直接存储Java对象,需要进行序列化或者转换成字符串等格式才可以进行存储。以下介绍两种常见的将Java对象存储到Redis的方案。
- 对象序列化,存储二进制数据
将对象进行序列化是将对象转换成二进制流,从而可以将这个二进制流存储到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时
可以按照以下步骤操作:
-
引入fastjson的依赖包。
-
定义一个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对象。