时间:2022-12-06 01:58
redis存储java对象的方法:1、写一个java Bean,包含id和name两个字段,类名是Person。因为要实现序列化需求,所以该类实现Serializable接口。2、需要写一个序列化工具类,用于提供对象的序列化和反序列化的工作;3、把Person对象写入Redis;4、用Jedis获取对象。
具体操作如下:
1、存储对象:写一个java Bean,包含id和name两个字段,类名是Person,该类实现Serializable接口。
publicclassPersonimplementsSerializable{privateintid;
privateStringname;
publicPerson(intid,Stringname){
this.id=id;
this.name=name;
}
publicintgetId(){
returnid;
}
publicStringgetName(){
returnname;
}
}
2、写一个序列化工具类,用于提供对象的序列化和反序列化的工作。
publicclassSerializeUtil{publicstaticbyte[]serialize(Objectobject){
ObjectOutputStreamoos=null;
ByteArrayOutputStreambaos=null;
try{
//序列化
baos=newByteArrayOutputStream();
oos=newObjectOutputStream(baos);
oos.writeObject(object);
byte[]bytes=baos.toByteArray();
returnbytes;
}catch(Exceptione){
}
returnnull;
}
publicstaticObjectunserialize(byte[]bytes){
ByteArrayInputStreambais=null;
try{
//反序列化
bais=newByteArrayInputStream(bytes);
ObjectInputStreamois=newObjectInputStream(bais);
returnois.readObject();
}catch(Exceptione){
}
returnnull;
}
}
3、把Person对象写入Redis。
publicvoidsetObject(){Personperson=newPerson(100,"alan");
jedis.set("person:100".getBytes(),SerializeUtil.serialize(person));
person=newPerson(101,"bruce");
jedis.set("person:101".getBytes(),SerializeUtil.serialize(person));
}
上面代码运行后,到命令窗口读取对象看是否成功:
redis127.0.0.1:6379>getperson: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"
4、用Jedis获取对象。
publicPersongetObject(intid){byte[]person=jedis.get(("person:"+id).getBytes());
return(Person)SerializeUtil.unserialize(person);
}
测试一下上一步存入的两个对象:
Personperson=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控制台输入:
100alan
101
bruce