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

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

[java]  view plain  copy
  1. import java.io.Serializable;  
  2. public class User implements Serializable{  
  3. private static final long serialVersionUID = 2724888087391664167L;  
  4. private String id;  
  5. private String username;  
  6. private String password;  
  7. public User() {  
  8. }  
  9. public User(String id, String username, String password) {  
  10. this.id = id;  
  11. this.username = username;  
  12. this.password = password;  
  13. }  
  14. public String getId() {  
  15. return id;  
  16. }  
  17. public void setId(String id) {  
  18. this.id = id;  
  19. }  
  20. public String getUsername() {  
  21. return username;  
  22. }  
  23. public void setUsername(String username) {  
  24. this.username = username;  
  25. }  
  26. public String getPassword() {  
  27. return password;  
  28. }  
  29. public void setPassword(String password) {  
  30. this.password = password;  
  31. }  
  32. public static long getSerialversionuid() {  
  33. return serialVersionUID;  
  34. }  
  35. @Override  
  36. public String toString() {  
  37. return "User [id=" + id + ", username=" + username + ", password="  
  38. + password + "]";  
  39. }  
  40. }  
序列化反序列化工具类
SerializeUtils.java

[java]  view plain  copy
  1. import java.io.ByteArrayInputStream;  
  2. import java.io.ByteArrayOutputStream;  
  3. import java.io.IOException;  
  4. import java.io.ObjectInputStream;  
  5. import java.io.ObjectOutputStream;  
  6. public class SerializeUtils {  
  7. public static byte[] serialize(Object obj){  
  8. byte[] bytes = null;  
  9. try {  
  10. ByteArrayOutputStream baos=new ByteArrayOutputStream();;  
  11. ObjectOutputStream oos=new ObjectOutputStream(baos);  
  12. oos.writeObject(obj);  
  13. bytes=baos.toByteArray();  
  14. baos.close();  
  15. oos.close();  
  16. catch (IOException e) {  
  17. e.printStackTrace();  
  18. }  
  19. return bytes;  
  20. }  
  21. public static Object deSerialize(byte[] bytes){  
  22. Object obj=null;  
  23. try {  
  24. ByteArrayInputStream bais=new ByteArrayInputStream(bytes);  
  25. ObjectInputStream ois=new ObjectInputStream(bais);  
  26. obj=ois.readObject();  
  27. catch (Exception e) {  
  28. e.printStackTrace();  
  29. }  
  30. return obj;  
  31. }  
  32. }  
测试类RedisTest.java
[java]  view plain  copy
  1. import java.util.HashMap;  
  2. import java.util.List;  
  3. import java.util.Map;  
  4. import java.util.Set;  
  5. import org.junit.Test;  
  6. import redis.clients.jedis.Jedis;  
  7. public class RedisTest{  
  8. private static Jedis jedis;  
  9. static{  
  10. //访问本地redis  
  11. jedis = new Jedis("127.0.0.1",6379);  
  12. }  
  13. @Test  
  14. public void serialize(){  
  15. User user=new User("1000""宝宝""xioabao");  
  16. jedis.set(user.getId().getBytes(), SerializeUtils.serialize(user));  
  17. byte[] bytes=jedis.get(user.getId().getBytes());  
  18. System.out.println((User)SerializeUtils.deSerialize(bytes));  
  19. }  

http://blog.csdn.net/xiaobao5214/article/details/52169712

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值