Spring Boot使用Redis的Lettuce连接池,隔一段时间再连接就报连接超时

QQ914237918 QQ914237918 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题详细解说:
问题是这样的 ,任何时间只要连接上了, 就能正常的连接,但是呢,空闲下来隔十来分钟后再连接就会出现超时的现象了。。这个说到连接池的问题了,分析是这样的
假设服务端没有问题,配置没有问题。那就是SpringBoot的Redis的Lettuce出了问题, 没有空闲连接,当连接上来之后,一切正常,隔一段时间没有连接的时候,就会Spring就瘵连接池关了连接切断了,然后页面再一次请求连接的时候,客户端再重新请求连接到服务器。所以才会出现 这样的问题。才会出现 连接超时,
之后呢,再一次请求连接,超时之后过十几秒之后,又能重新连接上了,只要一直不间断 的连接是没有问题的,问题是一停下来没有连接的时候过十多分钟连接才会出现这个连接超时的现象,
不知道大神会有没有出现 这样的问题呢,我现在郁闷死了,我所有的连接都是基于Redis的。。所以当这个用不了的时候基本上服务启动不了了。。
这个问题困扰了好几天了,找了几百个博客说超时的的现象是那个timeout: 1000ms这个的问题,其实我测试过就算我这里超时时间加大到一万秒也是这样超时的,。原因不是刚刚开始的时候连接不上,而是空闲下来隔一段时间后,Spring回收了或是关闭了Lettuce的连接池引起的。。。
希望有大神站出来的指导一下,谢谢!~

使用环境说明:java11版本,springBoot2.11, 我是redis直接安装到服务器上了,服务器版本是CentOS7,Redis是5.04版本。连接使用的时候是本地开发连接测试的。

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<spring-cloud.version>Greenwich.RC2</spring-cloud.version>


开发环境IDEA2018.2,
贴出配置

redis:
host: 服务器地址
password: 密码
database: 0
port: 端口
lettuce:
pool:
max-active: 20
max-wait: -1ms
max-idle: 10
min-idle: 2
timeout: 1000ms


pom
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>


配置类
@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
public class RedisConfig {


@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuce) {
//设置序列化
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// 配置redisTemplate
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(lettuce);
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
// key序列化
redisTemplate.setKeySerializer(stringSerializer);
// value序列化
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// Hash key序列化
redisTemplate.setHashKeySerializer(stringSerializer);
// Hash value序列化
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
...全文

相关推荐

Springboot Redis连接超时解决[项目源码]

文章介绍了在Spring Boot 2.4.4环境中使用Lettuce作为Redis连接池时遇到的连接超时问题。问题表现为项目启动后一段时间Redis自动掉线,报错为RedisCommandTimeoutException。作者分析了问题原因,指出Lettuce-core的实现中通过心跳机制保持长连接,但其策略是主动断开空闲连接并重新连接,导致超时。针对此问题,提供了两种解决方案:一是在Spring Boot 2.3以上版本中添加配置解决;二是排除Lettuce依赖,改用Jedis作为连接池。文章最后确认解决方案有效,Redis恢复正常运行。

熬夜协会会长

springboot2配置Lettuce连接池完整代码

springboot2配置Lettuce连接池完整代码,采用common2-pool连接池,Lettuce为redis高级客户端,由于阅读官网文档太简单,无法完成配置,所有本示例是通过阅读源码后编写的

鸡蛋加火腿

Spring boot集成redis lettuce代码实例

主要介绍了Spring boot集成redis lettuce代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

weixin_38747126

SpringBoot整合Lettuce redis过程解析

主要介绍了SpringBoot整合Lettuce redis过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

weixin_38704701

SpringBoot 整合 Lettuce Redis的实现方法

主要介绍了SpringBoot 整合 Lettuce Redis的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

weixin_38720009
评论 61
收藏 已收藏
分享
返回顶部
QQ914237918
Java 51,407 成员 86,128 内容