• Redis的序列化


    本文参考http://www.cnblogs.com/yaobolove/p/5632891.html

    Redis通过序列化存对象。

    首先来了解为什么实现序列化接口?

        当一个类实现了Serializable接口(该接口仅标记为接口,不包含任何方法定义),表示该类可以序列化。序列化的目的是将一个实现了Serializable接口的对象转化成一个字节序列,可以把该字节序列保存起来(例如:保存在一个文件夹里),以后可以随时将该序列恢复成原来的对象。甚至可以将该字节序列放到其他计算机上或者通过网络传输到其他计算机上恢复,只要该计算机平台存在相应的类就可以正常恢复为原来的对象。

    实现:要序列化一个对象,先要创建某些OutputStream对象,然后将其封装在一个ObjectOutputStream对象内,再调用writeObject()方法即可序列化一个对象;反序列化也类似。

    注意:使用对象流写入到文件不仅要保证该对象是序列化的,而且该对象的成员对象也必须是序列化的

    serialVersionUID

    相当于java类的身份证,主要用于版本控制。serialVersionUID作用是序列化时保持版本的兼容性,即在版本升级时反序列化仍然保持对象的唯一性。如果没有提供serialVersionUID,对象序列化后存到硬盘上,再增加或减少类的field。这样,当反序列化时,就会出现Exception,造成不兼容问题。但当serialVersionUID相同时,它就会将不一样的field以type的缺省值反序列化。这样就可以避开不兼容问题了。

    有两种生成方式:

      一个是默认的1L,例如:private static final long serialVersionUID = 1L;

      一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,例如: private static final long serialVersionUID = xxxxL; 

    缺省值 就是默认的意思,不用再进行设置。

     

    package redistest;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    
    import redis.clients.jedis.Jedis;
    public class SerializeUtil {
        public static void main(String[] args) {
            Jedis jedis=new Jedis("localhost");
            String keys="name";
            //存数据
            jedis.set(keys, "cn");
            //取数据
            String value=jedis.get(keys);
            System.out.println(value);
            
            //存对象
            Person p=new Person();
            p.setAge(18);
            p.setName("chengna");
            p.setId(1);
            jedis.set("person".getBytes(), serialize(p));
            byte[] byt=jedis.get("person".getBytes());
            Object obj = unserialize(byt);
            if(obj instanceof Person){
                System.out.println(obj);
            }
        }
        
        //序列化
        public static byte[] serialize(Object obj){
            ObjectOutputStream oos=null;
            ByteArrayOutputStream bos=null;
            try{
                bos=new ByteArrayOutputStream();
                oos=new ObjectOutputStream(bos);
                oos.writeObject(obj);
                byte[] byt=bos.toByteArray();
                return byt;
            }catch(IOException e){
                e.printStackTrace();
            }
            return null;
        }
        
        //反序列化
        public static Object unserialize(byte[] byt){
            ObjectInputStream ois=null;
            ByteArrayInputStream bis=null;
            bis=new ByteArrayInputStream(byt);
            try{
                ois=new ObjectInputStream(bis);
                Object obj=ois.readObject();
                return obj;
            }catch(Exception e){
                e.printStackTrace();
            }
            return null;
        }
    }

     

     

     

     

  • 相关阅读:
    Linux上的.NET框架Mono 2.0发布
    WordPress数据库管理中五个实用的phpMyAdmin技巧
    美国十三个性价比较好的空间推荐 建站可优选
    众多站长将网站移民海外 该如何选择国外VPS
    Mono 开发 (使用.NET技术的你,绝对不能忽略Mono)
    数据库访问的性能问题与瓶颈问题【z】
    IE和FireFox中的event事件
    经典国外网站大放送
    AppScan 7.8.1 简体中文
    用lighttpd+mono在Linux上面跑ASP.NET程序
  • 原文地址:https://www.cnblogs.com/qducn/p/6899634.html
Copyright © 2020-2023  润新知