我在 spring-boot 应用程序中使用 lettuce 作为我的 connectionFactory 来连接到 redis。每次操作前它都会创建一个新连接。使用 MONITOR 命令和分析器检查,在每次操作之前都会发送一个 PING 命令。附上我在下面使用的配置。
public LettuceConnectionFactory redisConnectionFactory() throws FileNotFoundException {
final SocketOptions socketOptions = SocketOptions.builder()
.connectTimeout(Duration.ofMillis(connectionTimeout)).keepAlive(true).build();
final SslOptions sslOptions = sslEnabled ? SslOptions.builder().jdkSslProvider()
.trustManager(ResourceUtils.getFile(truststorePath)).build() : null;
final ClientOptions clientOptions = sslEnabled
? ClientOptions.builder().sslOptions(sslOptions).socketOptions(socketOptions).build()
: ClientOptions.builder().socketOptions(socketOptions).build();
LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
.commandTimeout(Duration.ofMillis(timeout)).clientOptions(clientOptions).useSsl().build();
RedisStandaloneConfiguration serverConfig = new RedisStandaloneConfiguration(hostname,
port);
serverConfig.setPassword(accessKey);
final LettuceConnectionFactory lettuceConnectionFactory =
new LettuceConnectionFactory(serverConfig, clientConfig);
lettuceConnectionFactory.setValidateConnection(true);
lettuceConnectionFactory.setEagerInitialization(true);
lettuceConnectionFactory.afterPropertiesSet();
return lettuceConnectionFactory;
}
@Bean
public RedisTemplate<String, Long> redisTemplate() throws FileNotFoundException {
RedisTemplate<String, Long> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericToStringSerializer<>(Long.class));
return redisTemplate;
}
有没有办法重用生菜连接?
您可以根据 wiki 的连接池进行中继:
one connection can be shared amongst multiple threads and Lettuce connections auto-reconnection by default
因此您可以使用
pool.borrowObject()
为您的操作获取可能的当前连接。