gpt4 book ai didi

java - Redis 集群不适用于 SpringBoot + JPA 应用程序

转载 作者:可可西里 更新时间:2023-11-01 11:23:57 25 4
gpt4 key购买 nike

我正在做 poc(Redis + springboot + jpa) ,当我设置 Redis 属性 setEnableTransactionSupport(true ) 然后事务异常在集群模式中不支持,当我在获取 redisTemplate 期间设置 setEnableTransactionSupport(false) 然后资源异常游泳池来了。

@注意:当我在不同的机器上设置 Redis 和 spring boot 时,这个问题就出现了。我有 6 个节点,3 个是主节点,3 个是从节点。

但是当我在单台机器(spring + Redis)上设置整体时,它工作正常。

下面是我的依赖:

[<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>]

[<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
<type>jar</type>]

我已经尝试了以下链接中的建议: Jedis, Cannot get jedis connection: cannot get resource from pool下面是我对 Redis 连接工厂的配置:

## Redis Properties(application.properties)
spring.redis.cluster.nodes=127.0.0.1:7000,127.0.0.1:7001,127.0.0.1:7002

RedisClusterConfigProp.java

@Component
@ConfigurationProperties(value = "spring.redis.cluster")
public class RedisClusterConfigProp {
List<String> nodes;
/**
* @return the nodes
*/
public List<String> getNodes() {
return nodes;
}

/**
* @param nodes
* the nodes to set
*/
public void setNodes(List<String> nodes) {
this.nodes = nodes;
}

}

RedisClusterConfigration.java

@Configuration
public class RedisClusterConfigration {

@Autowired
public RedisClusterConfigProp clusterConfigProp;

@Bean
public RedisConnectionFactory redisConnectionFactory() {
JedisConnectionFactory jedisConnFac = new JedisConnectionFactory(
new RedisClusterConfiguration(clusterConfigProp.getNodes()), new JedisPoolConfig());
jedisConnFac.getPoolConfig().setMaxIdle(40);
jedisConnFac.getPoolConfig().setMinIdle(20);
return jedisConnFac;
}

@Bean
public RedisTemplate redisTemplate() {
RedisTemplate template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory());
template.setEnableTransactionSupport(false);
return template;
}

最佳答案

如果与节点的连接成功但从池中创建连接(用于读/写)失败(“无法从池中获取资源”等),这可能是因为当前主节点在不同的节点上(这是可能在安装期间配置)。

如果在这种情况下使用redis sentinel(不是redis cluster),ip:port列表(在config文件中)将被用来连接到sentinels,但是当前master的ip:port(不是config文件中的)会不同.这些 ip:port 配置在安装期间提供,或者可以稍后配置。

关于java - Redis 集群不适用于 SpringBoot + JPA 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54171112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com