在同一个应用中可能会同时用到多个redis数据源,并且这多个redis数据源可能模式还不一样,有单实例、集群、哨兵。
本文章就把这3种模式的redis数据源都集成到一个应用种。
那么就可以应付其他各种情况,例如,2个单实例3个集群4个哨兵等等。
只上干货:
pom
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
yml:
spring:
application:
name: two
#默认用集群配置,3主3从共6节点的集群
redis:
timeout: 6000ms
database: 10
# host: localhost #单实例redis用这个配置
# password: #单实例redis用这个配置
port: 6379 #单实例redis用这个配置
password: Redis@123
cluster: #集群用这个配置
nodes:
- 127.0.0.1:7011
- 127.0.0.1:7012
- 127.0.0.1:7013
- 127.0.0.1:7014
- 127.0.0.1:7015
- 127.0.0.1:7016
max-redirects: 2 #获取失败 最大重定向次数
lettuce:
pool:
max-active: 1000 #连接池最大连接数(使用负值表示没有限制)
max-idle: 10 #连接池中的最大空闲连接
min-idle: 3 #连接池中的最小空闲连接
max-wait: -1 #连接池最大阻塞等待时间(使用负值表示没有限制)
#redis单实例。单实例比较简单,ip,端口,密码,连接池就ok
redis2:
timeout: 6000ms
database: 0
host: localhost #单实例redis用这个配置
password: #单实例redis用这个配置
port: 6379 #单实例redis用这个配置
lettuce:
pool:
max-active: 1000 #连接池最大连接数(使用负值表示没有限制)
max-idle: 10 #连接池中的最大空闲连接
min-idle: 3 #连接池中的最小空闲连接
max-wait: -1 #连接池最大阻塞等待时间(使用负值表示没有限制)
#redis哨兵.一主2从192.168.10.1:6379,192.168.10.2:6379,192.168.10.3:6379。三哨兵192.168.10.1:26379,192.168.10.2:26379,192.168.10.3:26379
redis3:
timeout: 6000ms
database: 0
host: 192.168.10.1 #主节点的master
password: ha@123 #redis密码
port: 6379 #主节点的master端口
lettuce:
pool:
max-active: 1000 #连接池最大连接数(使用负值表示没有限制)
max-idle: 10 #连接池中的最大空闲连接
min-idle: 3 #连接池中的最小空闲连接
max-wait: -1 #连接池最大阻塞等待时间(使用负值表示没有限制)
sentinel:
master: mymaster
nodes:
- 192.168.10.1:26379
- 192.168.10.2:26379
- 192.168.10.3:26379
java配置:
需要3个读取yml的配置类,分别对应集群redis,单实例redis,哨兵redis。
package com.example.two.config.redis;
import java.util.List;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import lombok.Data;
/**
* 映射redis的集群配置
* yml:
#默认用集群配置,3主3从共6节点的集群
spring:
redis:
timeout: 6000ms
database: 10
port: 6379 #单实例redis用这个配置
password: Redis@123
cluster: #集群用这个配置
nodes:
- 127.0.0.1:7011
- 127.0.0.1:7012
- 127.0.0.1:7013
- 127.0.0.1:7014
- 127.0.0.1:7015
- 127.0.0.1:7016
max-redirects: 2 #获取失败 最大重定向次数
lettuce:
pool:
max-active: 1000 #连接池最大连接数(使用负值表示没有限制)
max-idle: 10 #连接池中的最大空闲连接
min-idle: 3 #连接池中的最小空闲连接
max-wait: -1 #连接池最大阻塞等待时间(使用负值表示没有限制)
* @author lsy
*
*/
//@Data
@ConfigurationProperties(prefix="spring.redis.cluster")
public class RedisConfigOne {
@Value("${spring.redis.host:127.0.0.1}")
private String host;
@Value("${spring.redis.port:6379}")
private int port;
@Value("${spring.redis.password:redis123}")
private String password;
@Value("${spring.redis.timeout:6000}")
private int timeout;
@Value("${spring.redis.database:0}")
private int database;
//pool映射
@Value("${spring.redis.lettuce.pool.max-active}")
private int maxActive;
@Value("${spring.redis.lettuce.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.lettuce.pool.min-idle}")
private int minIdle;