NoSQL之Redis(二)---Java操作Redis存儲自定義類型數據


NoSQL之Redis(二)---Java操作Redis存儲自定義類型數據

 


         Redis簡介

 

         Redis是一個開源,先進的key-value存儲,並用於構建高性能,可擴展的Web應用程序的完美解決方案。

 

         Redis從它的許多競爭繼承來的三個主要特點:

  • Redis數據庫完全在內存中,使用磁盤僅用於持久性。
  • 相比許多鍵值數據存儲,Redis擁有一套較爲豐富的數據類型。
  • Redis可以將數據複製到任意數量的從服務器。

 

         Redis操作

         使用java語言操作redis需要引用jedis的jar包,我用的版本是2.8.0【點擊下載】。Redis支持存儲的數據類型有String,List,Map,Set,Hash及Zset。

         由於簡單的操作Redis的基本類型在網上很容易就找到一堆資料,所以今天筆者主要寫如何使用redis存儲自定義類型。

         Redis中支持的基本類型String,而且在我試驗的過程中發現無論是List還是Map也都只能放String類型的數據。所以如果我們想要存儲自定義類型的數據的時候,不可避免的會有兩個過程——序列化與反序列化。

 

         代碼

//定義需要存儲的數據
StudentVo studentVo = newStudentVo();
studentVo.setId(student.getId());
studentVo.setApplyTeacherState(student.getApplyTeacherState());
studentVo.setBornDate(student.getBornDate());
studentVo.setHeadPic(student.getHeadPic());
studentVo.setIntroduce(student.getIntroduce());
studentVo.setIsTeacher(student.getIsTeacher());
studentVo.setRealName(student.getRealName());
studentVo.setNickName(student.getNickName());
studentVo.setPhoNum(student.getPhoNum());
 
jedis = new Jedis("XXX.56. XXX.XXX ", 6379);    //實例化一個新的jedis對象
 
UUID uuid = UUID.randomUUID();
String jSession = uuid.toString();
studentVo.setSessionId(jSession);      //jSession是用戶登錄過程中產生的唯一標識
jedis.set(jSession.getBytes(),SerializationUtil.serialize(studentVo));    //SerializationUtil負責序列化與反序列化的類
jedis.expire(jSession, 3600);            // 設置過期時間
 
//上面描述的是如何存儲自定義類型,下面是如何使用了
//如果登錄系統之後,系統訪問鏈接後面都會帶着一個UUID作爲唯一標識,
//例如:http://www.jrkj.org/itoo-jrkj-homepageset-web/index/63db86a4-12de-443d-bff0-23d4f6ab67c0
 
byte[] bSession= jedis.get(sessionId.getBytes());  //sessionId是用戶的唯一標識,
StudentVo student = (StudentVo)SerializationUtil.deserialize(bSession); //通過反序列化就能夠獲取存儲的數據


         序列化與反序列化代碼

public classSerializationUtil {
    /**
    * 序列化
    *
    * @param object
    * @return
    */
    publicstatic 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;
    }
 
    /**
    * 反序列化
    *
    * @param bytes
    * @return
    */
    publicstatic Object deserialize(byte[] bytes) {
       ByteArrayInputStream bais = null;
       try {
           bais = new ByteArrayInputStream(bytes);
           ObjectInputStream ois = new ObjectInputStream(bais);
           return ois.readObject();
       } catch (Exception e) {
 
       }
       return null;
    }
 
}

         小結

         Jedis操作redis存儲定義一類型主要就是一個序列化與反序列化的過程,這個之後你就可以存儲任意類型的數據了。不妨自己寫個demo試試,如何安裝redis之前的博客中已經有介紹,也可以在網上找找相關的教程。

 

         筆者在這裏提前祝大家新春快樂,希望新的一年裏,大家心想事成、闔家幸福!

發佈了129 篇原創文章 · 獲贊 16 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章