springboot之redis集成(遇到的那些坑)

一.集成過程

redis在阿里雲已經搭建好,本地用單元測試也通過了,本以爲使用springboot接入很easy,但是遇到了很多的坑

首先列一下springboot接入redis的步驟

1.在yml中配置一下redis的地址及端口,配置host主機地址和port端口即可即可

2.創建JedisConnectionFactory連接,讀取yml中的地址及端口;創建redisTemplate,並設置jedis連接工廠

3.使用redisTemplate操作

步驟很簡單,遇到的坑不少

二.問題及解決

問題一:Host Must Be Not Empty

剛開始感覺很奇怪,怎麼會報這個問題;首先跟着源碼找,找了很久發現問題隱藏的太深,跟不下去了;果斷換種

方式;根據錯誤日誌直接定位問題在哪裏,發現在創建連接工廠時出現的錯誤,然後追到以下類中

看到host是localhost,而url是我配置的redis所在的ip,果斷添加host,問題解決;

反思:剛配置的時候想當然以爲url就是主機ip了

問題二:redis連接工廠創建

redisTemplate創建需要連接到服務器,而連接到服務器需要連接工廠,現在有了rediaTemplate和redis服務,接

下來就是想怎麼把它倆串起來,自己在那裏捉摸了半天,試了很多類和方法,就是串不到一起;果斷百度,發現

網上類似的文章還挺多,拿來用(整合redis的三種連接方式),redis目前只搭建了單機版,所以用

RedisStandaloneConfiguration

反思:遇到問題先嚐試解決,解決不了站在巨人的肩膀上

問題三:template not initalized

template沒有初始化,這個問題很快定位到;原因是在創建RedisTemplate的時候沒有使用spring注入,而是自

己new的對象,所以在使用template的時候並沒有注入到spring中

問題四:jar包問題

個人覺得這類問題很難排查,缺少jar包還好,但是到jar的版本問題就很難搞,往往定位問題的方向就不對;

①jedis版本太低,有方法找不到,問題沒有復現出來,排查了好久,最終解決是去掉version,使用springboot默

認指定的或者是指定一個高版本的

②缺少apache的pool2包和net.sourceforge.cobertura,剛報出來問題有點蒙,cobertura是個什麼包,從來沒有

見過,從apache官網下載下來,問題解決,運行單元測試,redis寫成功;but,成功之後去掉pool2和

net.sourceforge.cobertura之後,程序依然運行成功,沒找到問題的原因,爲什麼在不加之前,本地構建都有問

題,加上這兩個包運行之後,然後再去掉這兩個包一點問題沒有

三.總結

本來以爲很簡單的redis接入,沒想到搞了半天,踩了好多坑,尤其到最後jar包問題,都快沒耐心了;感覺主要還

是自己對這塊東西並不是太熟悉

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