【Redis】解析Redis和Java传递数据
在Java中使用Redis之前需要導入?jedis.jar?包,由于Redis是基于key-value進行數據存儲,java中的數據存儲到Redis中有許多方式,這里筆者介紹采用JSON字符串和對象序列化兩種方式。
1,使用JSON方式
-
首先將Java對象轉化為JSON字符串
-
然后將JSON字符串存儲到Redis中
-
最后把JSON字符串從Redis中取出來,并且轉化為Java對象
首先導入和JSON使用相關的包:?gson.jar
實體類Person的代碼如下:
package cn.wxg.person;import java.io.Serializable;public class Person{private String name;private int age;public Person(String name, int age) {super();this.name = name;this.age = age;}public Person() {super();}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}} Person.java(1).將Java對象通過JSON存儲到Redis中
//創建Jedis對象Jedis jedis=new Jedis("127.0.0.1");//添加需要存儲的數據Person person=new Person();List<Person> persons=new ArrayList<Person>();persons.add(new Person("jame",3));persons.add(new Person("james",3));persons.add(new Person("ja",3));//將數據轉化為JSON字符串,存儲到Redis中jedis.set("person",new Gson().toJson(persons));(2).將Redis中的JSON字符串讀取出,然后轉化為Java對象
//創建Jedis對象Jedis jedis=new Jedis("127.0.0.1");//讀取數據String str = jedis.get("person");//再將數據轉化為Java對象List<Person> fj = new Gson().fromJson(str, List.class);//輸出數據Iterator<Person> iterator = fj.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}這種通過Json的方式比較好理解,關于這種方式的更多信息還可以參見詳解JAVA對象JSON的解析
2,使用對象序列化方式
在使用這種方式之前,需要存儲到實體類需要序列化,否則就不能存儲。
實體類Person的代碼如下:
package cn.wxg.person;import java.io.Serializable;public class Person implements Serializable{private static final long serialVersionUID = 1L;private String name;private int age;public Person(String name, int age) {super();this.name = name;this.age = age;}public Person() {super();}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}} Person.java工具類的方法SerializeUtil如下:
package cn.wxg.util;import java.io.*;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) {e.printStackTrace();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) {e.printStackTrace();return null;}} } SerializeUtil.java(1)將對象序列化,并且存儲到Redis中
//創建Jedis對象Jedis jedis=new Jedis("127.0.0.1");//需要存儲的數據Person person=new Person();List<Person> persons=new ArrayList<Person>();persons.add(new Person("jame",3));persons.add(new Person("james",3));persons.add(new Person("ja",3));//對存儲的數據序列化byte[] bt = SerializeUtil.serialize(persons);//將字節數據存儲到Redis中jedis.set("persons".getBytes(),bt);(2)從Redis中讀取數據,然后反序列化,得到Java對象
//創建Jedis對象Jedis jedis=new Jedis("127.0.0.1");//需要存儲的數據Person person=new Person();List<Person> persons=new ArrayList<Person>();persons.add(new Person("jame",3));persons.add(new Person("james",3));persons.add(new Person("ja",3));//對存儲的數據序列化byte[] bt = SerializeUtil.serialize(persons);//將字節數據存儲到Redis中jedis.set("persons".getBytes(),bt);這種方式效率比第一種高,推薦第二種。
3,Redis的使用地方
Redis可以用于性能優化,在這篇文章中SpringMVC詳解AOP中,說到了如何進行程序性能監聽。如果我們發現程序的速度表較慢的話,可以嘗試使用Redis進行緩存優化。
使用Redis緩存的思路為:
這里筆者再總結一下,就是在用戶請求的時候,首先查看Redis中是否有該數據(因為從Redis中取數據的速度比從關系型數據庫中取要快得多),如果有就直接從Redis中取,如果沒有就從數據庫中取,然后再把取出來的數據放到Redis中,這樣的話下次用戶請求的時候就可以直接從Redis中讀取數據了。
使用Redis作為中間緩存,會增加很多邏輯控制代碼。比如使用Oracle作為關系型數據庫,Redis作為中間緩存,那么Oracle和Redis的數據是不同步的,這時候對用戶的一些基本操作(增、刪、改、查)就會添加很多控制代碼,以保證Oracle和Redis中的數據一致性。
轉載于:https://www.cnblogs.com/HDK2016/p/7235919.html
總結
以上是生活随笔為你收集整理的【Redis】解析Redis和Java传递数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黑苹果xxx.efi格式文件介绍
- 下一篇: HALCON示例程序pcb_inspec