zoukankan      html  css  js  c++  java
  • Redis入门 – Jedis存储Java对象

    Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)

     

    原文地址:http://alanland.iteye.com/admin/blogs/1600685(欢迎转载 - 转载请保留该原文链接)

     

    07/19/12 03:08:05 PM

     

    在Jedis开发中,我们很多时候希望直接把一个对象放到Redis中,然后在需要的时候取出来。Redis的key和value都支持二进制安全的字符串,存储Java对象不是问题,下面我们看一下如何来实现。

     

    1要存储的对象

    现在写一个很土的Java Bean,包含两个字段,id和name,类名叫做Person。为了实现序列化需求,该类实现Serializable接口。

    public class Person implements Serializable {

    private int id;

    private String name;

     

    public Person(int id, String name) {

    this.id = id;

    this.name = name;

    }

     

    public int getId() {

    return id;

    }

     

    public String getName() {

    return name;

    }

    }

     

    2序列化、反序列化

    写一个序列化工具类,来提供对象的序列化和饭序列化的工作。代码如下:

    public class SerializeUtil {

    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;

    }

     

    public static Object unserialize(byte[] bytes) {

    ByteArrayInputStream bais = null;

    try {

    //反序列化

    bais = new ByteArrayInputStream(bytes);

    ObjectInputStream ois = new ObjectInputStream(bais);

    return ois.readObject();

    } catch (Exception e) {

     

    }

    return null;

    }

    }

     

    3写对象

    将Person对象写入Redis中:

    public void setObject() {

    Person person = new Person(100, "alan");

    jedis.set("person:100".getBytes(), SerializeUtil.serialize(person));

    person = new Person(101, "bruce");

    jedis.set("person:101".getBytes(), SerializeUtil.serialize(person));

    }

     

    运行上面代码之后,我们到命令行窗口中读取该对象,看看有没有写入成功:

    redis 127.0.0.1:6379> get person:100

    "xacxedx00x05srx00x15alanland.redis.Personx05xf4x8d9Axf4`xb0x02x00x02Ix00x02idLx00x04nametx00x12Ljava/lang/String;xpx00x00x00dtx00x04alan"

     

    可以取到序列化之后的值。

     

    4取对象

    用Jedis获取对象:

    public Person getObject(int id) {

    byte[] person = jedis.get(("person:" + id).getBytes());

    return (Person) SerializeUtil.unserialize(person);

    }

     

    测试一下上一步存入的两个对象:

    Person person = test.getObject(100);

    System.out.println(person.getId());

    System.out.println(person.getName());

    person = test.getObject(101);

    System.out.println(person.getId());

    System.out.println(person.getName());

     

    Java控制台输入:

    100

    alan

    101

    bruce

     

    由此可见,序列化对象在Redis中存取正确。

     

  • 相关阅读:
    c#抓取和分析网页的类
    优化 Microsoft Windows Media Services 9 Series
    IIS中HTTP压缩概述
    网站CND加速器是什么
    如何分析网页数据并且去除Html标签(C#)
    告别ASP.NET操作EXCEL的烦恼(总结篇)
    Windows Media Services 9 系列常见问题解答
    字体收藏
    水晶按钮最终效果图
    gzip
  • 原文地址:https://www.cnblogs.com/sand-tiny/p/3934269.html
Copyright © 2011-2022 走看看