Redis入门 – Jedis存储Java对象

摘要:
publicclassSerializeUtil{publicstaticbyte[]serialize(Objectobject){ObjectOutputStreamoos=null;try{//serialize baos=newByteArrayOutputStream();oos.writeObject(object);

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中存取正确。

 

免责声明:文章转载自《Redis入门 – Jedis存储Java对象》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇zabbix实现自定义监控Centos7 k8s v1.5.2二进制部署安装-网络插件Flannel的安装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Newtonsoft.Json(Json.Net)学习笔记-高级使用(转)

    1.忽略某些属性     2.默认值的处理     3.空值的处理     4.支持非公共成员     5.日期处理     6.自定义序列化的字段名称   7.动态决定属性是否序列化     8.枚举值的自定义格式化问题   9.自定义类型转换   10.全局序列化设置  一.忽略某些属性   类似本问开头介绍的接口优化,实体中有些属性不需要序列...

Fastjson介绍

简单介绍 Fastjson是一个Java语言编写的高性能功能完好的JSON库。 高性能 fastjson採用独创的算法,将parse的速度提升到极致,超过全部json库,包含以前号称最快的jackson。而且还超越了google的二进制协议protocol buf。 支持标准 Fastjson全然支持http://json.org的标准,也是官...

高效的数据压缩编码方式 Protobuf

一. protocol buffers 是什么? Protocol buffers 是一种语言中立,平台无关,可扩展的序列化数据的格式,可用于通信协议,数据存储等。 Protocol buffers 在序列化数据方面,它是灵活的,高效的。相比于 XML 来说,Protocol buffers 更加小巧,更加快速,更加简单。一旦定义了要处理的数据的数据结构之...

使用Web存储API存取本地数据

使用Web存储API TODO:本文由 赤石俊哉 翻译整理,您可以将本文自由地用于学习交流。如需用于其他用途请征得作者的同意。 原文链接:Using the Web Storage API - Mozilla Developer Network (英文) Web存储API提供了浏览器可以在本地安全存储键值对的一个机能,它比cookies更为直观。这篇文...

C#操作Xml:XmlSerializer 对象的Xml序列化和反序列化

这篇随笔对应的.Net命名空间是System.Xml.Serialization;文中的示例代码需要引用这个命名空间。 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中;内存中的对象如果需要传递给其他系统使用;或者在关机时需要保存下来以便下次再次启动程序使用就需要序列化和反序列化。 范围:本文只介绍xml序列化,其实序列化可以是二进...

操作二进制数据

 操作二进制数据在数据库编程中,往往需要把二进制数据保存到数据库。这些二进制数据有Word文件、PDF文件、图片文件、声音文件、可执行文件等。二进制数据在不同的SQL服务器中表示方法不同。SQL Server使用Binary类型表示二进制数据,Oracle使用Blob(大二进制对象)类型表示。在JDBC中操作二进制对象和其他数据类型有所不同,二进制对象通常...