Lettuce 在每次操作之前都会创建一个到 redis 的新连接

问题描述 投票:0回答:1

我在 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;
    }

有没有办法重用生菜连接?

java spring-boot redis jedis lettuce
1个回答
0
投票

您可以根据 wiki 的连接池进行中继:

one connection can be shared amongst multiple threads and Lettuce connections auto-reconnection by default

因此您可以使用

pool.borrowObject()
为您的操作获取可能的当前连接。

© www.soinside.com 2019 - 2024. All rights reserved.