Redis系列---【解決redis連接后,隔一段時間,連接慢的問題】


1.問題

  我用的springboot2.2.11連接redis7,發現每隔一段時間,redis就會出現lectture強制關閉遠程連接。

2.產生這種問題的原因

  1、Lettuce 自適應拓撲刷新(Adaptive updates)與定時拓撲刷新(Periodic updates) 是默認關閉的。
  2、項目用了k8s做docker容器化部署,但是k8s有設置空閑連接超時就斷開,所以當你從連接池拿到被斷開的連接時就會報錯。

3.解決方案

方案一

@Bean
    public RedisTemplate<String, Object> myRedisTemplate(LettuceConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        //解決redis每隔一段時間強制關閉遠程連接的問題
        factory.setValidateConnection(true);
        redisTemplate.setConnectionFactory(factory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        // 設置 Key 和 Value 的序列化規則
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        // 初始化 RedisTemplate 序列化完成
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

方案二

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

# 解決redis 240秒超時問題
    lettuce:
      cluster:
        refresh:
          adaptive: true
          period: 20

方案三

排除lettuce,采用jedis。

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>io.lettuce</groupId>
                    <artifactId>lettuce-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>    

注意配置文件把lettuce.pool換成jedis.pool。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM