SpringBoot整合Redis,连接超时及其解决方案

Spring Boot中整合redis的步骤:

1.引入redis的starters

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2. 写配置类,注入名为redisTemplate的bean

@Configuration
public class RedisConfig {

    /**
     * 向容器注入名称为方法名的(redisTemplate)bean
     * @return
     */
    @Bean
    public RedisTemplate<String,String> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate<String,String>  redisTemplate= new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return  redisTemplate;
    }
}

3. 在application.properties配置文件中:配置redis的连接信息

redis配置信息
# redis服务主机地址(一般是Linux内网地址ip)
#如果redis和开发工具安装在同一个系统下,可以直接使用localhost
#如果redis开启在linux虚拟机上,而开发工具安装在windwo,则要查询Linux虚拟机ip(ifconfig)
spring.redis.host=192.168.44.128
#spring.redis.host=localhost
# redis服务端口号
spring.redis.port=6379
spring.redis.database=0
#登录redis服务的密码
spring.redis.password=

4. 使用redisTemplate操作api.

@RestController
public class RedisController {

    @Resource
    private RedisTemplate  redisTemplate;


    @RequestMapping("/redis/setAndGet")
    public String setAndGet( String name,String value){
        //给redis存放string类型的key和value
        redisTemplate.opsForValue().set(name,value);
        return (String) redisTemplate.opsForValue().get(name);

    }

5.启动主配置类访问:结果一直报错:redis connect to  to 192.168.22.148(本地linux虚拟机地址)失败,如下:

首先,介绍我的项目环境:

当前项目位于本地window环境中,使用idea作为开发工具;而Redis对应的服务位于本地虚拟机上,所以在配置文件中关于Redis的host地址要写虚拟机ip。但是访问超时。于是就着手解决这个问题,根据一些博客的经验介绍:解决方案如下:

1.修改redis.conf配置的两个位置:

接着找到redis的配置文件redis.conf,直接进入配置文件:

vim redis.conf

找到 protected-mode no,修改成yes

protected-mode  no  →  protected-mode  yes

2.在linux系统上,开放redis的6379端口:

 1>进入配置文件:vim /etc/sysconfig/iptables

 2>添加想要放开的端口:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

3>退出保存iptables,并重启iptables

service iptables restart

此时,再启动idea 中的springboot就可以访问到redis.问题的解决,总是充满愉悦啊!

补充一点,在一篇博客中针对我们这种情况(我们这种情况是指:项目开发在window系统,而Redis又在远程或者虚拟机中。如果你完全使用的mac环境开发,其实不会有这样的问题的)提供了一个很好的验证方案:

详情地址链接如下:https://blog.csdn.net/DragonFreedom/article/details/79512686

简单的说就是:

 要测试有没有通,不用你一直跑代码,很麻烦,直接使用win的telnet,进入cmd,命令如下:

 telnet host port

这是我在解决问题过程中,一直测试端口是否可用。这个命令很有用。

当输入:telnet  linux ip     redis 的6378端口号,如:telnet 192.168.xx.111 6379 ,有反应且进入一个什么都没有的窗口,表示这个端口后可用访问;否则如果这个端口还是没有被放开或者拒绝访问,提示信息如上图。

解决方案参考了一些问题,感谢各位大佬:

https://blog.csdn.net/symsym_keepGoing/article/details/100609100?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

https://blog.csdn.net/DragonFreedom/article/details/79512686

https://blog.csdn.net/qq_41988504/article/details/85322022?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

https://blog.csdn.net/azhong148/article/details/79677049

https://ask.csdn.net/questions/386710?locationNum=11&fps=1

 

如果你觉得不好,请指正,希望每个人都可以遇见梦中的明天、

 

猜你喜欢

转载自blog.csdn.net/u014786083/article/details/105789109