我有2个Redis Server redis1和redis2实例。
我正在尝试从Spring数据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” :-(
哪里有问题?
最佳答案
由于它是单个应用程序,因此必须具有唯一的bean names
才能将它们全部填充为单个ApplicationContext
。否则,上下文启动后仅存在一个同名的bean。
默认情况下,@Bean
使用方法中的名称填充。这就是为什么您看到host1
而不是host2
的原因。
因此,或者为这些bean方法提供唯一的名称,或者使用@Bean(name = )
属性。
关于spring - Spring Data Redis多个实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28015587/