yml
spring:
redis1:
host: localhost
password: 123456
port: 6379
database: 0
timeout: 5000
ssl: on
jedis:
pool:
max-active: 50
max-idle: 50
min-idle: 10
max-wait: 10000
redis2:
host: localhost
password: 123456
port: 6380
database: 0
timeout: 5000
ssl: on
jedis:
pool:
max-active: 50
max-idle: 50
min-idle: 10
max-wait: 10000
RedisConfig
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
import java.time.Duration;
@Configuration
public class RedisConfig {
@Value("${spring.redis1.host}")
private String host1;
@Value("${spring.redis1.port}")
private int port1;
@Value("${spring.redis1.password}")
private String password1;
@Value("${spring.redis1.timeout}")
private int timeout1;
@Value("${spring.redis1.database}")
private int database1;
@Value("${spring.redis1.jedis.pool.max-active}")
private int maxTotal1;
@Value("${spring.redis1.jedis.pool.max-idle}")
private int maxIdle1;
@Value("${spring.redis1.jedis.pool.min-idle}")
private int minIdle1;
@Value("${spring.redis1.jedis.pool.max-wait}")
private long maxWaitMillis1;
@Value("${spring.redis1.ssl}")
private boolean isSsl1;
@Value("${spring.redis2.host}")
private String host2;
@Value("${spring.redis2.port}")
private int port2;
@Value("${spring.redis2.password}")
private String password2;
@Value("${spring.redis2.timeout}")
private int timeout2;
@Value("${spring.redis2.database}")
private int database2;
@Value("${spring.redis2.jedis.pool.max-active}")
private int maxTotal2;
@Value("${spring.redis2.jedis.pool.max-idle}")
private int maxIdle2;
@Value("${spring.redis2.jedis.pool.min-idle}")
private int minIdle2;
@Value("${spring.redis2.jedis.pool.max-wait}")
private long maxWaitMillis2;
@Value("${spring.redis2.ssl}")
private boolean isSsl2;
@Bean
@Primary
public JedisConnectionFactory connectionFactory1(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(maxTotal1);
jedisPoolConfig.setMaxIdle(maxIdle1);
jedisPoolConfig.setMinIdle(minIdle1);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis1);
jedisPoolConfig.setEvictorShutdownTimeoutMillis(timeout1);
RedisStandaloneConfiguration standaloneConfig = new RedisStandaloneConfiguration();
standaloneConfig.setHostName(host1);
standaloneConfig.setPassword(RedisPassword.of(password1));
standaloneConfig.setPort(port1);
standaloneConfig.setDatabase(database1);
JedisClientConfiguration.JedisClientConfigurationBuilder clientBuilder = JedisClientConfiguration.builder();
clientBuilder.usePooling().poolConfig(jedisPoolConfig);
if(isSsl1){
clientBuilder.useSsl();
}
clientBuilder.connectTimeout(Duration.ofMillis(timeout1));
clientBuilder.readTimeout(Duration.ofMillis(timeout1));
JedisClientConfiguration clientConfig = clientBuilder.build();
return new JedisConnectionFactory(standaloneConfig, clientConfig);
}
@Bean
public JedisConnectionFactory connectionFactory2(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(maxTotal2);
jedisPoolConfig.setMaxIdle(maxIdle2);
jedisPoolConfig.setMinIdle(minIdle2);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis2);
jedisPoolConfig.setEvictorShutdownTimeoutMillis(timeout2);
RedisStandaloneConfiguration standaloneConfig = new RedisStandaloneConfiguration();
standaloneConfig.setHostName(host2);
standaloneConfig.setPassword(RedisPassword.of(password2));
standaloneConfig.setPort(port2);
standaloneConfig.setDatabase(database2);
JedisClientConfiguration.JedisClientConfigurationBuilder clientBuilder = JedisClientConfiguration.builder();
clientBuilder.usePooling().poolConfig(jedisPoolConfig);
if(isSsl2){
clientBuilder.useSsl();
}
clientBuilder.connectTimeout(Duration.ofMillis(timeout2));
clientBuilder.readTimeout(Duration.ofMillis(timeout2));
JedisClientConfiguration clientConfig = clientBuilder.build();
return new JedisConnectionFactory(standaloneConfig, clientConfig);
}
@Bean(name = "redis1Template")
@Primary
public RedisTemplate<String, Object> redisTemplate1() {
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer((new GenericJackson2JsonRedisSerializer()));
JedisConnectionFactory connectionFactory = connectionFactory1();
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
@Bean(name = "redis2Template")
public RedisTemplate<String, Object> redisTemplate2() {
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer((new GenericJackson2JsonRedisSerializer()));
JedisConnectionFactory connectionFactory = connectionFactory2();
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
使用:
@Resource(name = "redis1Template")
RedisTemplate<String, String> redis1Template;
@Resource(name = "redis2Template")
RedisTemplate<String, String> redis2Template;
@GetMapping("redisTest")
public HttpResult redisTest() {
// 访问redis1
redis1Template.opsForValue().set("key1", "value1");
String value1 = redis1Template.opsForValue().get("key1");
System.out.println(value1);
// 访问redis2
redis2Template.opsForValue().set("key2", "value2");
String value2 = redis2Template.opsForValue().get("key2");
System.out.println(value2);
return HttpResult.ok();
}