您的位置:首页 > 数据库 > Redis

将java对象存储到redis数据库(使用序列化和反序列化)

2016-11-25 12:55 686 查看
Redis不支持直接将Java对象存储到数据库中,所以需要将java对象进行序列化得到字节数组,然后将字节数组存入到redis中,需要数据的时候就从redis数据库中取出字节数组,再经过反序列化将自己数组转换成对象使用(jdk序列化性能比谷歌公司的Protobuf序列化性能要差一些,而且序列化后的字节长度要也会长一些,所以推荐使用Protobuf,Protobuf如何进行序列化请看我的另一篇帖子)
实体类

User.java


[java] view
plain copy

 





import java.io.Serializable;  

public class User implements Serializable{  

private static final long serialVersionUID = 2724888087391664167L;  

private String id;  

private String username;  

private String password;  

public User() {  

}  

public User(String id, String username, String password) {  

this.id = id;  

this.username = username;  

this.password = password;  

}  

public String getId() {  

return id;  

}  

public void setId(String id) {  

this.id = id;  

}  

public String getUsername() {  

return username;  

}  

public void setUsername(String username) {  

this.username = username;  

}  

public String getPassword() {  

return password;  

}  

public void setPassword(String password) {  

this.password = password;  

}  

public static long getSerialversionuid() {  

return serialVersionUID;  

}  

@Override  

public String toString() {  

return "User [id=" + id + ", username=" + username + ", password="  

+ password + "]";  

}  

}  

序列化反序列化工具类

SerializeUtils.java

[java] view
plain copy

 





import java.io.ByteArrayInputStream;  

import java.io.ByteArrayOutputStream;  

import java.io.IOException;  

import java.io.ObjectInputStream;  

import java.io.ObjectOutputStream;  

public class SerializeUtils {  

public static byte[] serialize(Object obj){  

byte[] bytes = null;  

try {  

ByteArrayOutputStream baos=new ByteArrayOutputStream();;  

ObjectOutputStream oos=new ObjectOutputStream(baos);  

oos.writeObject(obj);  

bytes=baos.toByteArray();  

baos.close();  

oos.close();  

} catch (IOException e) {  

e.printStackTrace();  

}  

return bytes;  

}  

public static Object deSerialize(byte[] bytes){  

Object obj=null;  

try {  

ByteArrayInputStream bais=new ByteArrayInputStream(bytes);  

ObjectInputStream ois=new ObjectInputStream(bais);  

obj=ois.readObject();  

} catch (Exception e) {  

e.printStackTrace();  

}  

return obj;  

}  

}  

测试类RedisTest.java

[java] view
plain copy

 





import java.util.HashMap;  

import java.util.List;  

import java.util.Map;  

import java.util.Set;  

import org.junit.Test;  

import redis.clients.jedis.Jedis;  

public class RedisTest{  

private static Jedis jedis;  

static{  

//访问本地redis  

jedis = new Jedis("127.0.0.1",6379);  

}  

@Test  

public void serialize(){  

User user=new User("1000", "宝宝", "xioabao");  

jedis.set(user.getId().getBytes(), SerializeUtils.serialize(user));  

byte[] bytes=jedis.get(user.getId().getBytes());  

System.out.println((User)SerializeUtils.deSerialize(bytes));  

}  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis