赞
踩
线上环境每次内存满了redis会报这个问题,org.redisson.client.WriteRedisConnectionException: Unable to send command!,就是分布式锁的命令无法执行,导致许多业务都出现问题。
重启,调试了许久还是锁定在redis上连接上,查了下资料。
https://github.com/redisson/redisson/issues/1811
最终锁定在这篇知乎上了https://zhuanlan.zhihu.com/p/83153573
问题的主要原因是:在redis出问题之后,watchdog发现连接无效之后,然后打印了一个警告日志之后,就没法有自动重连了,导致继续使用该连接的时候出问题,问题解决,ConnectionWatchdog.channelInactive.tryReconnect方法:
redisson/src/main/java/org/redisson/client/handler/ConnectionWatchdog.java
refresh(connection, channel);
log.debug("{} connected to {}, command: {}", connection, connection.getRedisClient().getAddr(), connection.getCurrentCommand());
} else {
log.warn("Can't connect " + connection + " to " + connection.getRedisClient().getAddr(), future.cause());
channel.close();
reconnect(connection, nextAttempt);
}
}
});
return;
解决版本如下,如果遇到相同的问题可以选择一个升级: redisson-3.11.3、redisson-3.11.2、redisson-3.11.1、redisson-3.11.0、redisson-3.10.7、redisson-3.10.6、redisson-3.10.5、redisson-3.10.4、redisson-3.10.3、redisson-3.10.2、redisson-3.10.1、redisson-2.15.2、redisson-2.15.1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。