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之前的博客中已經有介紹,也可以在網上找找相關的教程。
筆者在這裏提前祝大家新春快樂,希望新的一年裏,大家心想事成、闔家幸福!