【Redis】如何使用Redis保存Java對象

前言

最近幾天有同事在開發跑合微信版的過程中碰到了一個問題。由於微信端需要通過H5的入口進行賬號的綁定,同時需要在會話過期之前定時輪詢保持會話有效。這個時候需要在系統中保存微信的ApiConfig對象。

由於這部分的開發之前一直是由外包公司在做,他們給出的解決方案就是使用Ecache來將ApiConfig整個對象保存到緩存裏面。本來這樣做也沒有問題的,但是問題就在於跑合系統之前一直都是使用Redis進行數據緩存的,至於爲什麼要用Redis來做數據緩存呢?原因就是之前使用的Ecache在集羣環境下有一些bug的情況,所以換成Redis的。現在又說要用回Ecache,感覺上外包公司提出的這種方案只是爲了自己能夠整個對象保存用起來方便,而又在有Redis的基礎上再加上一個緩存而已。並沒有實質上說明了爲什麼Redis不能夠使用。因此求人不如求己,自己做了一個Redis對於Java對象的封裝。

封裝內容

外包公司之前提供的Redis的接口都是通過jedis來注入redisTemplate,然後通過redisTemplate實現對Redis Server的操作的。

 

從上圖中可以看出,外包公司給出的封裝內容還是不錯的,能夠滿足平常工作的需求。但是,對於本次面臨的問題這裏提供的方法是不夠用的。Redis的官方文檔對於Java實體是沒有直接保存的接口可以調用的。這個就需要我們先轉化一下實體的類型再進行保存。

我們在上圖給出接口中,隨便找一個set的方法來看一下。

可以看到在connection.hSet中保存的是序列化內容,在跟蹤一下hSet的接口。

參數都是byte[]進行傳入,這個很重要。也就是說傳入的內容最終還是要轉化成byte數組之後纔可以保存,當然java對象也是可以先轉成byte數組的形式的。

新建保存對象接口

RedisDataService.java

實現接口內容

RedisDataServiceImpl.java

編寫對象序列化工具類

RedisSerializeUtil.java

使用開發

獲取的時候需要分成兩步,先通過hGetByte的方法獲取到byte數組,然後通過RedisSerializeUtil.unserialize反序列化成一個對象再將其強制轉換成ApiConfig對象。

而保存的時候直接使用hSetByte保存就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章