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包问题,都快没耐心了;感觉主要还

是自己对这块东西并不是太熟悉

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