Spring Data Redis有多个实例

时间:2015-01-18 22:32:48

标签: spring redis spring-data

我有2个Redis Server redis1和redis2实例。 我正在尝试使用Spring Data Redis支持获取数据形式redis1并将数据保存到redis2但它无法正常工作。我的代码:

//class a
@Configuration
public class RedisAConfig {
    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
        jedisConnectionFactory.setHostName("host1");
        return jedisConnectionFactory;
    }

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

        return redisTemplate;
    }
}

//class b
@Configuration
public class RedisBConfig {
    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
        jedisConnectionFactory.setHostName("host2");
        return jedisConnectionFactory;
    }

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

        return redisTemplate;
    }
}

//use class
@EnableConfigurationProperties({RedisAConfig.class, RedisBConfig.class})
public class Receiver {

    @Autowired
    private RedisAConfig redisAConfig;

    @Autowired
    private RedisAConfig redisBConfig;

    private String getUsernameFromRedis(String userIp) {

        return redisBConfig.redisTemplate().opsForValue()..get(userIp);
    }

    private void saveThreatsToRedis(String userIp, List<Log> threats)    {
        JSONSerializer serializer = new JSONSerializer();
        String json = serializer.serialize(threats);
        String key = "TH:" + userIp;
        redisAConfig.redisTemplate().opsForValue().set(key, json);
    }
}

当我使用方法getUsernameFromRedis()时,使用redis的主机是“host1”而不是“host2”:-( 问题在哪里?

2 个答案:

答案 0 :(得分:2)

由于它是一个应用程序,因此您必须使用唯一的bean names将其全部填充为单个ApplicationContext。否则在上下文启动后只存在一个具有相同名称的bean。

默认情况下,@Bean会填充方法中的名称。这就是为什么你看到host1,而不是host2

所以,或者为这些bean方法提供唯一的名称,或者使用@Bean(name = )属性。

答案 1 :(得分:1)

@Autowired 私人RedisAConfig redisAConfig;

@Autowired 私人 RedisAConfig redisBConfig;

它应该是RedisBConfig。