org.springframework.data.redis.RedisConnectionFailureException: java.net.SocketException: Broken pip

最近名下的两个应用总是会提示redis链接不上,错误日志如下:

org.springframework.data.redis.RedisConnectionFailureException: java.net.SocketException: Broken pip_第1张图片

说下这个问题当时的解决思路:

首先解释一下broken pipe异常https://blog.csdn.net/yang5726685/article/details/78802169;

查看应用的配置文件后发现,应用中有两个redis的配置文件,一个用来登录鉴权,一个日常系统的redis存储;

用来做登录鉴权的redis配置文件如下:

org.springframework.data.redis.RedisConnectionFailureException: java.net.SocketException: Broken pip_第2张图片

用来做日常系统的redis存储配置的文件如下

org.springframework.data.redis.RedisConnectionFailureException: java.net.SocketException: Broken pip_第3张图片

对比之后发现其中对于JedisConnectionFactory也就是链接工厂的配置的实例id重名;也就是说两个Template使用的是一个工厂

且两个Template的构造机制不一样的,第二个Template还加了事务(题外话:事务是很多链接问题的的根源)

看到这里后猜测有可能是重名导致的,手工修改其中一个factory的名称,重新构建之后

发现问题就再也没有出现过。

 

衍生下 如果出现拿不到链接的时候,可以尝试修改一下属性:

1.JedisPoolConfig-maxWaitMillis属性,该属性的作用是用于配置最大的请求连接等待时间,如果等待时间过长对连接资源也是一种浪费

2.JedisPoolConfig-testOnBorrow属性,该属性作用是在获取连接时,判断连接是否可用,默认配置为false,如果配置true时对性能有所影响

3.RedisTemplate-enableTransactionSupport属性,该属性作用是给redis的链接加上事务,类似于mysql的链接事务,这个属性,从我的经验来说,慎用

你可能感兴趣的:(org.springframework.data.redis.RedisConnectionFailureException: java.net.SocketException: Broken pip)