<!-- spring-data-redisコンポーネントを導入します。デフォルトでLettuce依存SDKが統合されています --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId><version>6.3.0.RELEASE</version></dependency><dependency><groupId>io.netty</groupId><artifactId>netty-transport-native-epoll</artifactId><version>4.1.100.Final</version><classifier>linux-x86_64</classifier></dependency>
import java.time.Duration;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.connection.RedisStandaloneConfiguration;import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;import io.lettuce.core.ClientOptions;import io.lettuce.core.SocketOptions;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;@Configurationpublic class lettuceSingleConfig {// @Value("${tencent.redis.host}")// private String redisHost;//// @Value("${tencent.redis.port:6379}")// private Integer redisPort = 6379;//// @Value("${tencent.redis.database:0}")// private Integer redisDatabase = 0;//// @Value("${tencent.redis.password:}")// private String redisPassword;@Value("${tencent.redis.connect.timeout:2000}")private Integer redisConnectTimeout = 2000;@Value("${tencent.redis.command.timeout:2000}")private Integer redisCommandTimeout = 2000;/*** TCP_KEEPALIVE設定パラメータ*/@Value("${tencent.redis.tcp.keepalive.time.idle:30}")private Integer redisTcpKeepaliveTimeIdle = 30;@Value("${tencent.redis.tcp.keepalive.time.interval:10}")private Integer redisTcpKeepaliveTimeInterval = 10;@Value("${tencent.redis.tcp.keepalive.count:3}")private Integer redisTcpKeepaliveCount = 3;/*** TCP_USER_TIMEOUTはLettuceの長時間タイムアウト問題を解決します。*/@Value("${tencent.redis.tcp.user.timeout:30}")private Integer redisTcpUserTimeout = 30;/*** pool関連パラメータ*/@Value("${tencent.redis.pool.max-wait:1000}")private Integer RedisPoolMaxwait = 1000;@Value("${tencent.redis.pool.max-active:2000}")private Integer RedisPoolMaxTotal = 2000;@Value("${tencent.redis.pool.max-idle:1000}")private Integer RedisPoolMaxIdle = 1000;@Value("${tencent.redis.pool.min-idle:500}")private Integer RedisPoolMinIdle = 500;/*** redisConnectionFactoryおよび関連パラメータ(Host、Port、Database、Password)とapplication.propertiesの設定方式のいずれかを選択します。*/// @Bean// public LettuceConnectionFactory redisConnectionFactory(LettuceClientConfiguration clientConfiguration) {//// RedisStandaloneConfiguration standaloneConfiguration = new RedisStandaloneConfiguration();// standaloneConfiguration.setHostName(redisHost);// standaloneConfiguration.setPort(redisPort);// standaloneConfiguration.setDatabase(redisDatabase);// standaloneConfiguration.setPassword(redisPassword);//// LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(standaloneConfiguration, clientConfiguration);// connectionFactory.setDatabase(redisDatabase);// return connectionFactory;// }@Beanpublic LettuceClientConfiguration clientConfiguration() {SocketOptions socketOptions = SocketOptions.builder().keepAlive(SocketOptions.KeepAliveOptions.builder()// 接続がどのくらいアイドル状態になったらkeepaliveを開始するか.idle(Duration.ofSeconds(redisTcpKeepaliveTimeIdle))// 2回のkeepalive間の時間間隔.interval(Duration.ofSeconds(redisTcpKeepaliveTimeInterval))// keepaliveが数回行われた後に接続を切断します。.count(redisTcpKeepaliveCount)// キープアライブ接続を有効にするかどうか.enable().build()).tcpUserTimeout(SocketOptions.TcpUserTimeoutOptions.builder()// サーバー側のrstによる長時間タイムアウト問題を解決します。.tcpUserTimeout(Duration.ofSeconds(redisTcpUserTimeout)).enable().build())// tcp接続タイムアウト設定.connectTimeout(Duration.ofMillis(redisConnectTimeout)).build();ClientOptions clientOptions = ClientOptions.builder().autoReconnect(true).pingBeforeActivateConnection(true).cancelCommandsOnReconnectFailure(false).disconnectedBehavior(ClientOptions.DisconnectedBehavior.ACCEPT_COMMANDS).socketOptions(socketOptions).build();// 接続プール設定を作成し、LIFOを無効にします。GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();poolConfig.setLifo(false); // LIFOを無効にし、FIFOモードを有効にします。poolConfig.setMaxTotal(RedisPoolMaxTotal); // オプション:最大接続数を設定します。poolConfig.setMaxIdle(RedisPoolMaxIdle); // オプション:最大アイドル接続数を設定します。poolConfig.setMinIdle(RedisPoolMinIdle); // オプション:最小アイドル接続数を設定します。poolConfig.setMaxWait(Duration.ofMillis(RedisPoolMaxwait));return LettucePoolingClientConfiguration.builder().poolConfig(poolConfig).commandTimeout(Duration.ofMillis(redisCommandTimeout)).clientOptions(clientOptions).build();}}
フィードバック