日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Redis】解析Redis和Java传递数据

發布時間:2023/12/10 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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緩存的思路為:

@RequestMapping("querybook.do")public ModelAndView querybook(Integer bookId){//查看在Redis中是否有該書籍的信息Jedis jedis=new Jedis();Book book=jedis.get(bookId.toString());if(book!=null){//直接把Redis讀取的數據返回return book;}else{//從數據庫中讀取數據book=Database.query(bookId);//將數據存儲到Redis中jedis.set("book".getBytes(),SerializeUtil.serialize(book));//將數據返回return book;}}

這里筆者再總結一下,就是在用戶請求的時候,首先查看Redis中是否有該數據(因為從Redis中取數據的速度比從關系型數據庫中取要快得多),如果有就直接從Redis中取,如果沒有就從數據庫中取,然后再把取出來的數據放到Redis中,這樣的話下次用戶請求的時候就可以直接從Redis中讀取數據了。

使用Redis作為中間緩存,會增加很多邏輯控制代碼。比如使用Oracle作為關系型數據庫,Redis作為中間緩存,那么Oracle和Redis的數據是不同步的,這時候對用戶的一些基本操作(增、刪、改、查)就會添加很多控制代碼,以保證Oracle和Redis中的數據一致性。

轉載于:https://www.cnblogs.com/HDK2016/p/7235919.html

總結

以上是生活随笔為你收集整理的【Redis】解析Redis和Java传递数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。