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 2 3 4 5 6 | 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();
}
想要体面生活,又觉得打拼辛苦;想要健康身体,又无法坚持运动。人最失败的,莫过于对自己不负责任,连答应自己的事都办不到,又何必抱怨这个世界都和你作对?人生的道理很简单,你想要什么,就去付出足够的努力。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥