专注app软件定制开发postman测试接口使用redis报错Unable to connect to Redis; nested exception is org

专注app软件定制开发有些小问题明明很简单,专注app软件定制开发但是由于之前没有碰到过,专注app软件定制开发出了问题也只好网上查询,专注app软件定制开发其实别人说的方式已经都是对的,专注app软件定制开发但是自己尝试了之后还是没有解决问题,怎么说呢,事无巨细,把核心问题给说了,但是有的是需要搭建环境的,可能大佬们看来这已经无需再提,但是也是有一些没经历过的同学们难免不能全部考虑到,下面就把这个我碰到的问题经过和处理心得给大家说一下,本来五分钟解决的问题,因为没考虑周全,尝试了半天才知道原来败给了一个小小的基本点。

  程序使用redis,用访问接口时候,报错内容一下

  1. org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is org.springframework.data.redis.connection.PoolException: Could not get a resource from the pool; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 192.168.31.160:6379
  2. at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.translateException(LettuceConnectionFactory.java:1553)
  3. at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1461)
  4. at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1247)
  5. at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:1230)
  6. at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedConnection(LettuceConnectionFactory.java:979)
  7. at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getConnection(LettuceConnectionFactory.java:359)
  8. at org.springframework.data.redis.core.RedisConnectionUtils.fetchConnection(RedisConnectionUtils.java:193)
  9. at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:144)
  10. at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:105)
  11. at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:209)
  12. at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:189)
  13. at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:176)
  14. at org.springframework.data.redis.core.script.DefaultScriptExecutor.execute(DefaultScriptExecutor.java:58)
  15. at org.springframework.data.redis.core.script.DefaultScriptExecutor.execute(DefaultScriptExecutor.java:52)
  16. at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:343)
  17. Caused by: org.springframework.data.redis.connection.PoolException: Could not get a resource from the pool; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 192.168.31.160:6379
  18. at org.springframework.data.redis.connection.lettuce.LettucePoolingConnectionProvider.getConnection(LettucePoolingConnectionProvider.java:109)
  19. at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1459)
  20. ... 101 more
  21. Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to 192.168.31.160:6379
  22. at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78)
  23. at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:56)
  24. at io.lettuce.core.AbstractRedisClient.getConnection(AbstractRedisClient.java:320)
  25. at io.lettuce.core.RedisClient.connect(RedisClient.java:211)
  26. at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.lambda$getConnection$1(StandaloneConnectionProvider.java:115)
  27. at java.base/java.util.Optional.orElseGet(Optional.java:369)
  28. at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:115)
  29. at
  30. at org.springframework.data.redis.connection.lettuce.LettucePoolingConnectionProvider.getConnection(LettucePoolingConnectionProvider.java:103)
  31. ... 102 more
  32. Caused by: java.io.IOException: 远程主机强迫关闭了一个现有的连接。
  33. at java.base/sun.nio.ch.SocketDispatcher.write0(Native Method)
  34. at java.base/sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51)
  35. at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:113)
  36. at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:58)

在网上查询之后,也有很多碰到这个问题的,也找到了解决办法,

解决办法:

一、application.yml的中的spring.redis.timeout中连接超时时间(毫秒)中时间设置不能为0

二、找到redis的配置文件(我用的是windows系统)找到redis的安装目录,就是如下图。

 

 redis.windows.conf 和 redis.windows-service.conf   两个配置文件都修改了,修改一下内容。用打开文件,修改后记得保存。

修改 protected-mode  yes 改为:protected-mode no(保护模式默认开启,关闭了之后,就可以通过IP访问了,本来是只支持127.0.0.访问的)但是我用192.168.313.160(ip)访问时候就不不能访问成功了,现在就是要解决这个问题。

注释掉 #bind 127.0.0.1(bind)就是指定访问redis的ip,如果不取消就只能用127.0.0.1访问了,所以取消了。

还有一个密码可以设置,requirepass 后面跟踪的就是密码,默认是关闭的状态没有密码,

三、yml文件中配置参数
# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=192.168.30.103
# Redis服务器连接端口
spring.redis.port=6379
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=5000

但是自己操作之后还是没有解决问题,使用127.0.0.1是可以访问redis的

yml文件的配置如下

  1. spring:
  2. redis:
  3. ## Redis数据库索引(默认为0)
  4. database: 0
  5. ## Redis服务器地址
  6. host: 192.168.31.160
  7. ## Redis服务器连接端口
  8. port: 6379
  9. ## Redis服务器连接密码(默认为空)
  10. # password: 123456abc
  11. client-type: lettuce
  12. lettuce:
  13. pool:
  14. max-active: 20
  15. max-idle: 10
  16. min-idle: 0
  17. max-wait: 10000
  18. timeout: 20000

一切都设置了,重启了redis还是访问出问题,包同样的错误,最后才知道是重启redis的时候没有指定配置文件启动,他还是会用默认的配置文件启动,也就是说修改的配置文件没有生效,所以明明操作正确了,但是结果看上去还没有变化,是因为重启reids的时候没有指定配置文件

也怪自己没有留意,我每次都是点击的是redis-server来启动的redis服务,启动窗口都提醒了,自己刚开始没有留心看到,才导致耽误很久时间,

 启动窗口很明显写了,没有找到配置文件,就用了一个默认的配置文件启动了redis,意思就是虽然修改了配置文件,但是启动时候没有去按照指定的配置文件启动redis,所以没有效果,这种情况下最为难了,明明修改成功了,但是没有效果,又去找其他解决办法,走了很多的冤枉路。

在安装redis的根目录下打开cmd,运行redis-server redis.windows.conf;
redis即可带配置文件并完成启动.

 

这样就可以把修改的配置文件生效了。再次访问接口,就不会再报错了。


redis.windows.conf为本目录中的一个配置文件,里面要关闭保护,否则可能会错误提示.即protected-mode yes修改为 protected-mode no

win上,可以通过建立bat文件,快速启动redis,方法是先在redis所在的目录中,建立一个start_redis_conf.txt 文件,里面内容为

  1. @ECHO OFF
  2. redis-server redis.windows.conf
  3. pause


重命名为start_redis_conf.bat,双击运行即可快速启动服务端.

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发