请问下,有用lettuce连接redis集群的吗?我的springboot2,用的lettuce连接redis集群,发现很多tcp都连在slave节点上,并且每次请求都会重建连接。而用jedis没这个问题
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
lettuce 是一个可伸缩线程安全的 Redis 客户端,它为 Spring Boot 应用程序提供了很好的 Redis 集群支持。关于您提到的问题,这里有几个可能的原因和解决建议:
连接到 Slave 节点:Lettuce 默认会根据 Redis 集群的哈希槽分配策略自动选择节点进行连接,包括 Master 和 Slave 节点。如果您的应用大部分操作是读取操作,连接到 Slave 节点是正常且推荐的行为,因为这样可以减轻 Master 节点的压力。但如果您希望控制连接只指向 Master 节点,可以通过配置 ReadFrom
策略来实现。例如,设置为 ReadFrom.MASTER
。
每次请求重建连接:这通常意味着连接池没有正确配置或未被充分利用。Lettuce 使用 PoolingClientConnectionManager
来管理连接,确保连接可以复用而不是每次都创建新的连接。您需要检查您的 Spring Boot 应用中的 Lettuce 连接池配置。以下是一个基本的配置示例:
@Bean
public LettuceConnectionFactory lettuceConnectionFactory() {
RedisClusterConfiguration clusterConfig = new RedisClusterConfiguration();
clusterConfig.clusterNodes(Arrays.asList(
"node1:port", "node2:port", "node3:port")); // 替换为实际集群节点地址
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMaxTotal(128); // 最大连接数
poolConfig.setMaxIdle(128); // 最大空闲连接数
poolConfig.setMinIdle(16); // 最小空闲连接数
return new LettuceConnectionFactory(clusterConfig,
PoolBuilderFactory.create(poolConfig, ClusterClientOptions.builder().build()));
}
确保在配置中设置了合理的最大连接数、最大空闲连接数等参数,并且在使用 Redis 操作时,始终通过 RedisTemplate
或 StringRedisTemplate
来间接操作 Redis,这些模板类会自动管理连接的获取与释放。
如果以上建议不能解决问题,请检查是否有特定的日志信息提示错误或异常,这有助于进一步定位问题所在。