SpringBoot2でレタストポロジの更新の問題を使用する

SpringBoot 2.xでデフォルトで使用されるRedisクライアントはJedisからLettuceに変更されましたが、Redisクラスター内のノードがハングダウンすると、Lettuceは引き続きRedisを操作できなくなります。これは、Lettuceが引き続き問題のある接続情報を使用するためです。今回は。

実際、Lettuceはredisクラスタートポロジの動的更新をサポートしていますが、デフォルトではオンになっておらず、Lettuceを統合するときにSpringBootはデフォルトでオンになりません。また、SpringBoot 2.3.0より前は、トポロジを自動的に更新するようにLettuceを設定するための構成項目はありませんでした。

関連する問題:Redisクラスタートポロジの更新を有効にするための構成を追加します

解決策1:解決策1:

  1. SpringBoot2.3.0以降にアップグレードします。そして、以下の構成項目を追加します
spring.redis.timeout=60s
spring.redis.lettuce.cluster.refresh.period=60s
spring.redis.lettuce.cluster.refresh.adaptive=true

解決策2:
LettuceConnectionFactoryを構成し、トポロジー更新戦略を設定します。

@Bean
public DefaultClientResources lettuceClientResources() {
    
    
    return DefaultClientResources.create();
}

@Bean
public LettuceConnectionFactory lettuceConnectionFactory(RedisProperties redisProperties, ClientResources clientResources) {
    
    

    ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
            .enablePeriodicRefresh(Duration.ofSeconds(30)) //按照周期刷新拓扑
            .enableAllAdaptiveRefreshTriggers() //根据事件刷新拓扑
            .build();

    ClusterClientOptions clusterClientOptions = ClusterClientOptions.builder()
            //redis命令超时时间,超时后才会使用新的拓扑信息重新建立连接
            .timeoutOptions(TimeoutOptions.enabled(Duration.ofSeconds(10)))
            .topologyRefreshOptions(topologyRefreshOptions)
            .build();

    LettuceClientConfiguration clientConfiguration = LettuceClientConfiguration.builder()
            .clientResources(clientResources)
            .clientOptions(clusterClientOptions)
            .build();

    RedisClusterConfiguration clusterConfig = new RedisClusterConfiguration(redisProperties.getCluster().getNodes());
    clusterConfig.setMaxRedirects(redisProperties.getCluster().getMaxRedirects());
    clusterConfig.setPassword(RedisPassword.of(redisProperties.getPassword()));

    LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(clusterConfig, clientConfiguration);

    return lettuceConnectionFactory;
}

解決策3:解決策3:

  1. spring-boot-starter-data-redisが依存するレタスをジェダイに変更します。
<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>

おすすめ

転載: blog.csdn.net/u013202238/article/details/108528650