redis主要存储类型最常用的五种数据类型:
- String
- Hash
- List
- Set
- Sorted set
redis不能直接存取对象,如何解决呢?
两种方式
1、利用序列化和反序列化的方式
两层对象存取到redis 示例:
序列化工具类
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; } }
public class Person implements Serializable { private String pid; private String pName; private String nation; private String age; private Animal animal;
1 public class Animal implements Serializable { 2 private String aId; 3 private String color; 4 private String hobby; 5 private String aName;
在此强调必须让类实现序列化
1 public class RedisObject { 2 public static void main(String[] args) { 3 //连接本地的 Redis 服务 4 Jedis jedis = new Jedis("10.0.34.52",6379); 5 jedis.auth(""); 6 System.out.println("Connection to server sucessfully"); 7 //查看服务是否运行 8 System.out.println("Server is running: " + jedis.ping()); 9 Person person = new Person(); 10 person.setAge("15"); 11 person.setNation("美国"); 12 person.setpName("jim"); 13 Animal animal = new Animal(); 14 animal.setaId("21"); 15 animal.setaName("小白"); 16 animal.setColor("red"); 17 person.setAnimal(animal); 18 System.out.println("序列化中"); 19 jedis.set("person".getBytes(),SerializeUtil.serialize(person)); 20 System.out.println("序列化成功"); 21 byte[] bytes = jedis.get("person".getBytes()); 22 Object object = SerializeUtil.unserialize(bytes); 23 Person person1= (Person)object; 24 System.out.println(person1);
2:将java对象转换为json字符串,利用json与java对象之间可以相互转换的方式进行存值和取值
try {
String s = JacksonUtils.getInstance().writeValueAsString(person);
System.out.println("对象转化字符串:"+s);
jedis.set("person2",s);
String person2 = jedis.get("person2");
Person person3 = JacksonUtils.getInstance().readValue(person2, Person.class);
System.out.println(person3);
} catch (IOException e) {
e.printStackTrace();
}