【问题标题】:Spring data Redis Cluster Lettuce Connection SettingsSpring data Redis Cluster Lettuce 连接设置
【发布时间】:2020-07-16 16:34:00
【问题描述】:

我们将 spring data redis 与 lettuce 一起使用,lettuce 使用单连接,但在 Web 应用程序中,根据我的假设,最好使用连接池。下面是java配置的代码

 @Configuration
    @ComponentScan(basePackages = { "com.test.*" })
    public class AppConfig {
    
        @Bean
        public LettuceConnectionFactory getLettuceConnectionFactory() {
              List<String> clusterNodes = Arrays.asList("redis-cluster----0001-001.redis-cluster---.usw2.cache.amazonaws.com:6379", "redis-cluster----0001-002.redis-cluster---.usw2.cache.amazonaws.com:6379");
              final LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(new RedisClusterConfiguration(clusterNodes));
              lettuceConnectionFactory.setTimeout(10000);
              lettuceConnectionFactory.setUseSsl(true);
              lettuceConnectionFactory.setVerifyPeer(false);
              lettuceConnectionFactory.setStartTls(false);
              lettuceConnectionFactory.afterPropertiesSet();
              return lettuceConnectionFactory;
        }
        
        @Bean
        public RedisTemplate<String, Object> redisTemplate() {
              final RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
              redisTemplate.setKeySerializer(new StringRedisSerializer());                                           
              redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
              redisTemplate.setConnectionFactory(getLettuceConnectionFactory());
              return redisTemplate;
        }
    
    }

由于我们使用的是 Spring data redis 1.8.23 和 Lettuce 4.5.0.final,我们不能使用 LettucePoolingClientConfiguration 。
为 AWS Elastic Cache 使用 DefaultLettucePool 是否是好的选择,使用 setShareNativeConnection 设置为 false 的缺点是什么。

拥有连接池的任何其他更好的选择。

【问题讨论】:

  • 为什么生菜需要多个连接?由于 Lettuce 使用 NIO 网络模型和 async 命令进行 Redis 操作,如果没有太多管道和事务,连接池不会比单个连接有太多优势。
  • 我几乎每 10/20 秒进行一次 get 和 set 操作

标签: redis spring-data-redis lettuce aws-elasticache


【解决方案1】:

为 AWS Elastic Cache 使用 DefaultLettucePool 是一个不错的选择

从功能的角度来看,它工作得很好,唯一的问题是它已被弃用,因此使用它会产生技术债务。

使用 setShareNativeConnection 设置为 false 的缺点是什么

它会增加应用程序的网络 I/O,因为每个操作都会打开和关闭一个套接字。将其保持为 true 可确保多个 LettuceConnection 对象可以重用本机连接。

作为替代方案,请尝试使用Jedis 作为您的引擎,而不是生菜。我使用这个库获得了一些出色的性能,它也支持连接池。

【讨论】:

    猜你喜欢
    • 2018-06-01
    • 1970-01-01
    • 2018-07-06
    • 2021-03-20
    • 2016-05-30
    • 2020-10-26
    • 2017-02-21
    • 2020-01-21
    • 2021-01-01
    相关资源
    最近更新 更多