0%

Springboot连接多个Redis

在SpringBoot项目适用多个Redis数据源

SpringBoot同时连接多个Redis

一、首先在pom文件中引入依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!-- 排除默认lettuce包-->
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 底层采用jedis连接-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
</dependencies>

二、设置redis不同数据源的配置信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
spring:
redis:
localredis:
host: 127.0.0.1
port: 6379
tencentredis:
host: 101.43.214.18
port: 6379
jedis:
pool:
#最大连接数
max-active: 8
#最大阻塞等待时间
max-wait: -1
#最大空闲连接数
max-idle: 8
#最小空闲连接数
min-idle: 0
#连接超时时间
timeout: 30000

三、编写Redis配置类 注入RedisTemplate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
@Configuration
public class RedisConfig {
//localredis
@Value("${sprint.redis.localredis.host")
private String firstHost;
@Value("${sprint.redis.localredis.port")
private Integer firstPort;
//localredis
@Value("${sprint.redis.tencentredis.host")
private String SecondHost;
@Value("${sprint.redis.localredis.port")
private Integer SecondPort;

//连接工厂
public JedisConnectionFactory jedisConnectionFactory(String host,Integer port){
RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
configuration.setHostName(host);
configuration.setPort(port);
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(configuration);
return jedisConnectionFactory;
}


//RedisTemplate
@Bean
public RedisTemplate<String, Object> redisFirstTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(
jedisConnectionFactory(firstHost,firstPort)
);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
//RedisTemplate
@Bean
public RedisTemplate<String, Object> redisSecondTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(
jedisConnectionFactory(SecondHost,SecondPort)
);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}