java redis怎么存object
时间: 2024-01-15 14:04:06 浏览: 27
在Java中使用Redis存储对象,需要将对象序列化为字节数组,常用的序列化方式有Java内置的序列化方式和JSON等。然后可以使用Jedis等Java Redis客户端库提供的set等方法将序列化后的字节数组存储到Redis中。
以下是使用Java内置序列化方式存储对象到Redis的示例代码:
```java
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import redis.clients.jedis.Jedis;
public class RedisObjectStorage {
public static void main(String[] args) {
// 连接Redis
Jedis jedis = new Jedis("localhost", 6379);
// 序列化对象
Person person = new Person("Alice", 20);
byte[] bytes = serialize(person);
// 存储对象到Redis
jedis.set("my_obj".getBytes(), bytes);
// 从Redis中获取对象
byte[] result = jedis.get("my_obj".getBytes());
Person obj = (Person) deserialize(result);
System.out.println(obj.getName()); // 输出Alice
// 关闭连接
jedis.close();
}
// 序列化方法
private static byte[] serialize(Object obj) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (ObjectOutputStream oos = new ObjectOutputStream(baos)) {
oos.writeObject(obj);
} catch (Exception e) {
e.printStackTrace();
}
return baos.toByteArray();
}
// 反序列化方法
private static Object deserialize(byte[] bytes) {
Object obj = null;
try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes))) {
obj = ois.readObject();
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
}
// Person类
class Person implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
```
需要注意的是,使用Java内置序列化方式会导致序列化后的字节数组较大,存储和传输的效率较低。建议使用JSON等轻量级的序列化方式来存储对象。