关于java中Redis存取问题
在java中用redisOperation.setex(keyInterface,RedisConstants.HOME_PAGE_EXPIRE_SECONDS,interfaceManagements);存入了三种类型值,分别是Key,有效期,状态,现在我想取出有效期和状态,怎么去啊,用redisOperation.get(key)怎么取不出来,为null
分类: java体系
在Jedis开发中,我们很多时候希望直接把一个对象放到Redis中,然后在需要的时候取出来。Redis的key和value都支持二进制安全的字符串,存储java对象不是问题,下面我们看一下如何来实现。1要存储的对象
现在写一个很土的java Bean,包含两个字段,id和name,类名叫做Person。为了实现序列化需求,该类实现Serializable接口。publicclassPersonimplementsSerializable{privateint id;private String name;publicPerson(int id, String name){this.id = id;this.name = name;}publicintgetId(){return id;}public String getName(){return name;}}
2序列化、反序列化
写一个序列化工具类,来提供对象的序列化和饭序列化的工作。代码如下:
publicclassSerializeUtil{publicstaticbyte[] 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) {}returnnull;}publicstatic Object unserialize(byte[] bytes){ByteArrayInputStream bais = null;try {//反序列化bais = new ByteArrayInputStream(bytes);ObjectInputStream ois = new ObjectInputStream(bais);return ois.readObject();} catch (Exception e) {}returnnull;}}
3写对象
将Person对象写入Redis中:publicvoidsetObject(){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控制台输入:100alan101bruce
由此可见,序列化对象在Redis中存取正确。