• springboot整合Redis后间歇性io.lettuce.core.RedisCommandTimeoutException


    在springboot中引入spring-boot-starter-data-redis依赖时,默认使用的时Lettuce
    产生这种问题的原因有如下两点:
    1、Lettuce 自适应拓扑刷新(Adaptive updates)与定时拓扑刷新(Periodic updates) 是默认关闭的。
    2、项目用了k8s做docker容器化部署,但是k8s有设置空闲连接超时就断开,所以当你从连接池拿到被断开的连接时就会报错。

    springboot2.3以上版本,可添加配置解决。

        lettuce:
          cluster:
            refresh:
              adaptive: true
              period: 20
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    每次链接都进行自动校验

    @Component
    @Slf4j
    public class LettuceConnectionValidConfig implements InitializingBean {
        @Autowired
        private RedisConnectionFactory redisConnectionFactory;
     
        @Override
        public void afterPropertiesSet() throws Exception {
            if(redisConnectionFactory instanceof LettuceConnectionFactory){
                LettuceConnectionFactory c=(LettuceConnectionFactory)redisConnectionFactory;
                c.setValidateConnection(true);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    定时任务

    @Component
    @Slf4j
    public class LettuceConnectionValidTask   {
        @Autowired
        private RedisConnectionFactory redisConnectionFactory;
     
        @Scheduled(cron="0/2 * * * * ?")
        public void task() {
            if(redisConnectionFactory instanceof LettuceConnectionFactory){
                LettuceConnectionFactory c=(LettuceConnectionFactory)redisConnectionFactory;
                c.validateConnection();
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    排除lettuce,采用jedis。

    		
    			org.springframework.boot
    			spring-boot-starter-data-redis
    			
    				
    					io.lettuce
    					lettuce-core
    				
    			
    		
    		
    		
    			redis.clients
    			jedis
    		
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    结构体,联合体与位段
    云计算是什么?学习云计算能做什么工作?
    bash和sh和./的区别
    SpringBoot+Jwt+Redis
    SQL注入原理、过程、防御方案、RASP概念
    【PHP】php中JSON或数组到formData的键值对转换
    [NISACTF 2022]上
    提升用户体验,Xinstall智能判定拉起技术来袭
    微信小程序——Git版本管理
    SpringCloud知多少
  • 原文地址:https://blog.csdn.net/liuyunshengsir/article/details/134377212