Redis保存对象的两种方式


title: Redis保存对象的两种方式
date: 2019-11-09 12:39:05
updated: 2019-11-09 12:39:05
categories:

  • 搬砖笔记
  • redis

tags:

  • redis

Redis保存对象的两种方式

一、序列化(实体需要实现Serializable接口)

  • 序列化就是将一个对象转换为二进制的数据流。这样就可以进行传输,或者保存到文件中。如果一个类的对象要想实现序列化,就必须实现serializable接口在此接口中没有任何的方法,此接口只是作为一个标识,表示本类的对象具备了序列化的能力而已。
  • 反序列化:将二进制数据流转换成相应的对象

主要代码如下:

//保存对象(list一样)
Company company1 = new Company();
company1.setCustId(102034L);
company1.setCustName(getSessionUser().getCustName());
String string = jedisClient.set("test123".getBytes(),SerializationUtil.serialize((company1));
//获取对象
byte[] bs = jedisClient.get("test123".getBytes());
Company company =(Company)SerializationUtil.deserialize(bs);

序列化工具类(两个)代码如下:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class SerializationUtil {
    /**
     * 序列化
     * 
     * @param object
     * @return
     */
    public static byte[] serialize(Object object) {
        ObjectOutputStream oos = null;
        ByteArrayOutputStream baos = null;
        try {
            baos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);
            oos.writeObject(object);
            byte[] bytes = baos.toByteArray();
            return bytes;
        } catch (Exception e) {
        }
        return null;
    }

    /**
     * 反序列化
     * 
     * @param bytes
     * @return
     */
    public static Object deserialize(byte[] bytes) {
        ByteArrayInputStream bais = null;
        try {
            bais = new ByteArrayInputStream(bytes);
            ObjectInputStream ois = new ObjectInputStream(bais);
            return ois.readObject();
        } catch (Exception e) {

        }
        return null;
    }

}


//这个也是可以的 捕获了一些异常
public class ObjectTranscoder {  
    public static byte[] serialize(Object value) {    
        if (value == null) {    
            throw new NullPointerException("Can't serialize null");    
        }    
        byte[] rv=null;    
        ByteArrayOutputStream bos = null;    
        ObjectOutputStream os = null;    
        try {    
            bos = new ByteArrayOutputStream();    
            os = new ObjectOutputStream(bos);    
            os.writeObject(value);    
            os.close();    
            bos.close();    
            rv = bos.toByteArray();    
        } catch (IOException e) {    
            throw new IllegalArgumentException("Non-serializable object", e);    
        } finally {    
            try {  
                 if(os!=null)os.close();  
                 if(bos!=null)bos.close();  
            }catch (Exception e2) {  
             e2.printStackTrace();  
            }    
        }    
        return rv;    
    }    
  
   public static Object deserialize(byte[] in) {    
        Object rv=null;    
        ByteArrayInputStream bis = null;    
        ObjectInputStream is = null;    
        try {    
            if(in != null) {    
                bis=new ByteArrayInputStream(in);    
                is=new ObjectInputStream(bis);    
                rv=is.readObject();    
                is.close();    
                bis.close();    
            }    
        } catch (Exception e) {    
            e.printStackTrace();  
         }finally {    
             try {  
                 if(is!=null)is.close();  
                 if(bis!=null)bis.close();  
             } catch (Exception e2) {  
                 e2.printStackTrace();  
             }  
         }  
        return rv;    
    }    
}

二、json字符串

//保存对象(list一样)
Company company1 = new Company();
company1.setCustId(102034L);
company1.setCustName(getSessionUser().getCustName());
String string = jedisClient.set("test123", com.alibaba.fastjson.JSON.toJSONString(company1));
//获取对象
String returnValue = jedisClient.get("test123");
Company company = com.alibaba.fastjson.JSON.parseObject(returnValue,Company.class);
System.out.println(company.getCustName());

用redis的字符串存储java对象的话,后面查询的数据是没法进行分页的,如果要分页可以考虑用redis的list存储

发布了30 篇原创文章 · 获赞 76 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/a1275302036/article/details/102881607