Jedis存储Java对象–Java序列化为byte数组方式 – majian

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

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

package com.ljq.test;import java.io.Serializable;@SuppressWarnings("serial")public class Person implements Serializable {    private int id;    private String name;    public Person() {    }    public Person(int id, String name) {        super();        this.id = id;        this.name = name;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

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

package com.ljq.test;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class SerializeUtil {    /**     * 序列化     *      * @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 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、单元测试使用junit对Jedis进行单元测试。代码如下:

package com.ljq.test;import org.junit.Before;import org.junit.Test;import redis.clients.jedis.Jedis;public class PersonRedisTest {    private static Jedis jedis=null;        /**     * 初始化Jedis对象     *      * @throws Exception     */    @Before    public void before() throws Exception {        jedis=new Jedis("127.0.0.1", 6379);    }        /**     * 序列化写对象, 将Person对象写入Redis中     *      * 我们到命令行窗口中读取该对象,看看有没有写入成功:      * redis 127.0.0.1:6379> get person:100     * "\xac\xed\x00\x05sr\x00\x15alanland.redis.Person\x05\xf4\x8d9A\xf4`\xb0\x02\x00\x02I\x00\x02idL\x00\x04namet\x00\x12Ljava/lang/String;xp\x00\x00\x00dt\x00\x04alan"     * 可以取到序列化之后的值。     */    @Test    public void setObject() {        jedis.set("person:100".getBytes(), SerializeUtil.serialize(new Person(100, "zhangsan")));        jedis.set("person:101".getBytes(), SerializeUtil.serialize(new Person(101, "bruce")));    }        /**     * 反序列化取对象, 用Jedis获取对象     *      */    @Test    public void getObject() {        byte[] data100= jedis.get(("person:100").getBytes());        Person person100 = (Person) SerializeUtil.unserialize(data100);        System.out.println(String.format("person:100->id=%s,name=%s", person100.getId(), person100.getName()));                byte[] data101= jedis.get(("person:101").getBytes());        Person person101 = (Person) SerializeUtil.unserialize(data101);        System.out.println(String.format("person:101->id=%s,name=%s", person101.getId(), person101.getName()));    }}

那些曾经以为念念不忘的事情就在我们念念不忘的过程里,被我们遗忘了。

Jedis存储Java对象–Java序列化为byte数组方式 – majian

相关文章:

你感兴趣的文章:

标签云: