• 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。

  • 相关阅读:
    第二部分 设计类型:第8章 方法
    centos7 网卡重命名
    centos7修改主机名
    修改umask值
    mysql表字段属性
    mysql基础操作
    mysql错误代码ERROR 1045 (转载)
    sed高级用法
    shell拷贝原文件到目标对应文件夹
    函数(位置传参)
  • 原文地址:https://www.cnblogs.com/hujunwei/p/16151442.html
Copyright © 2020-2023  润新知