如何使用Redis群集创建RedisTemplate

时间:2020-01-13 20:15:41

标签: redis spring-data-redis redis-cluster

以下是代码片段,可以很好地连接到Redis实例并执行CRUD操作。 (单个实例)

@Bean
public JedisConnectionFactory connectionFactory() {
    RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(redisUri, redisPort);
    config.setPassword(redisPassword);

    JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration
            .builder();
    jedisClientConfiguration.connectTimeout(Duration.ofMillis(120000));
    jedisClientConfiguration.usePooling();

    return new JedisConnectionFactory(config, jedisClientConfiguration.build());
}

@Bean
public RedisTemplate<String, Object> redisTemplate(JedisConnectionFactory jedisConnectionFactory) {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
    redisTemplate.setConnectionFactory(jedisConnectionFactory);
    return redisTemplate;
}

但是在尝试建立RedisClusterConfiguration并创建具有以下错误的RedisTemplate时...(多个实例)

/*
 * spring.redis.cluster.nodes[0] = 127.0.0.1:7379 spring.redis.cluster.nodes[1]
 * = 127.0.0.1:7380 ...
 */
   @Bean
   public JedisConnectionFactory connectionFactory() {
    RedisClusterConfiguration clusterConfig = new RedisClusterConfiguration(clusterProperties.getNodes());
    clusterConfig.setPassword(redisPassword);

    JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration
            .builder();
    jedisClientConfiguration.connectTimeout(Duration.ofMillis(120000));
    jedisClientConfiguration.usePooling();

    return new JedisConnectionFactory(clusterConfig, jedisClientConfiguration.build());
}

@Bean
public RedisTemplate<String, Object> redisTemplate(JedisConnectionFactory jedisConnectionFactory) {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
    redisTemplate.setConnectionFactory(jedisConnectionFactory);
    return redisTemplate;
}

org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为'redisCacheApplication'的bean时出错:通过字段'redisService'表示的不满足的依赖关系;嵌套的异常是org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为'redisService'的bean时出错:通过字段'repo'表示的不满足的依赖关系;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名称为'scheduledOperationRepository'的bean时出错:在设置bean属性'keyValueOperations'时无法解析对bean'redisKeyValueTemplate'的引用;嵌套的异常是org.springframework.beans.factory.BeanCreationException:创建名称为'redisKeyValueTemplate'的bean时出错:在设置构造函数参数时无法解析对bean'redisKeyValueAdapter'的引用;嵌套的异常是org.springframework.beans.factory.BeanCreationException:创建名称为'redisKeyValueAdapter'的bean时出错:在设置构造函数参数时无法解析对bean'redisTemplate'的引用;嵌套的异常是org.springframework.beans.factory.UnsatisfiedDependencyException:创建在类路径资源[demo / config / RedisConfig.class]中定义的名称为'redisTemplate'的bean时出错:通过方法'redisTemplate'参数0表示的不满足的依赖关系;嵌套的异常是org.springframework.beans.factory.BeanCreationException:创建在类路径资源[demo / config / RedisConfig.class]中定义的名称为'connectionFactory'的bean时出错:调用init方法失败;嵌套的例外是redis.clients.jedis.exceptions.JedisDataException:不允许使用ERR命令 在上org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643)〜[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] 在org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:116)〜[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]

有人可以指引我正确的方向...谢谢

0 个答案:

没有答案