首页 文章

Redis集群与Spring启动集成

提问于
浏览
0

我有 redis cluster with master, slave and 3 sentinel servers . 主服务器和从服务器映射到dns名称为node1-redis-dev.com,node2-redis-dev.com . redis服务器版本是2.8

我在application.properties文件中包含以下内容 .

spring.redis.cluster.nodes=node1-redis-dev.com:6379,node2-redis-dev.com:6379
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.pool.max-active=-1
spring.redis.pool.max-wait=-1

但是当我检查StringRedisTemplate时,JedisConnectionFactory的 I see localhost instead of cluster information under hostName property .

另外,我在JedisPool的creationStackTrace属性中看到了异常 .

java.lang.Exception
    at org.apache.commons.pool2.impl.BaseGenericObjectPool.<init>(BaseGenericObjectPool.java:139)
    at org.apache.commons.pool2.impl.GenericObjectPool.<init>(GenericObjectPool.java:107)
    at redis.clients.util.Pool.initPool(Pool.java:43)
    at redis.clients.util.Pool.<init>(Pool.java:31)
    at redis.clients.jedis.JedisPool.<init>(JedisPool.java:80)
    at redis.clients.jedis.JedisPool.<init>(JedisPool.java:74)
    at redis.clients.jedis.JedisPool.<init>(JedisPool.java:55)
    at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.createRedisPool(JedisConnectionFactory.java:228)
    at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.createPool(JedisConnectionFactory.java:204)

Debug information

CasheRepository类如下所示,

@Component
@CacheConfig(cacheNames = "enroll", cacheManager = "enrollCM")
public class EnrollCashRepository {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;    
    //Other methods 
}

我使用spring-boot-starter-redis 1.2.7的spring boot 1.3.4导入jedis 2.7.3依赖 .

使用Spring启动应用程序集成redis集群时我缺少什么?

1 回答

  • 1

    所需的只是在RedisClusterConfiguration中设置集群节点的初始集合,并将其提供给JedisConnectionFactory .

    @Configuration
    class Config {
    
        List<String> clusterNodes = Arrays.asList("node1-redis-dev.com:6379", "node2-redis-dev.com:6379");
    
        @Bean
        RedisConnectionFactory connectionFactory() {
          return new JedisConnectionFactory(new RedisClusterConfiguration(clusterNodes));
        }
    
        @Bean
        RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
    
          // just used StringRedisTemplate for simplicity here.
          return new StringRedisTemplate(factory);
        }
    }
    

相关问题