redis存取对象

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;
    }
}
复制代码

  

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();
}

 


 


 

posted @   potent_prince  阅读(4273)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥
点击右上角即可分享
微信分享提示