Springboot2.2 Redis複数インスタンスの簡単な手動構成
8352 ワード
Springbootを2.0にアップグレードした後、Redisの配置は2.0以前に比べて特に大きな変化があり、私もSpringboot 2を初めて学びました。0、间违ったところがあるに违いない。この投稿を読んだ友达に収获してほしい。本文のspringbootバージョンは2.2.0だ。BUILD-SNAPSHOT springboot 2.0以降、redisの配置が私に与える印象は主に2つの方式があり、1つはstandalone方式を使用すること、1つは伝統的なjedisに基づく配置、2つはLettuce方式を使用すること、nettyに基づく通信、springboot 2である。0の新しい方式は、lettuce方式を推奨し、ロットsetとdeleteのテスト(RedisTemplateのdelete法とopsForのset法を直接使用)を経て、後者の効率は前者より2倍程度高い。 本明細書では、standaloneまたはlettuce方式にかかわらずapacheのcommons-pool 2で提供されるGenericObjectPoolConfigインスタンスをredisの接続プールとして使用し、jedisPoolConfigの使用を放棄する。
pomでのRedisの構成には参照が必要です.
org.springframework.boot
spring-boot-starter-data-redis
org.apache.commons
commons-pool2
Spring application.yml:
のRedis インスタンスを で するため、poolとredia-a/b/cの とspringbootのauto-cofing の いに する があります。
spring:
redis:
lettuce:
pool:
MaxTotal: 50
minIdle: 1
maxWaitMillis: 5000
maxIdle: 5
testOnBorrow: true
testOnReturn: true
testWhileIdle: true
redis-a:
database: 0
hostName: 192.168.0.88
port: 6379
timeout: 5000
redis-b:
database: 1
hostName: ${spring.redis.redis-a.hostName}
port: ${spring.redis.redis-a.port}
timeout: ${spring.redis.redis-a.timeout}
redis-c:
database: 2
hostName: ${spring.redis.redis-a.hostName}
port: ${spring.redis.redis-a.port}
timeout: ${spring.redis.redis-a.timeout}
standalone
standalone のredis インスタンスを し、redisのstandalone を する 、pomにjedisクライアントを で する があります。どうせ の はspring-boot-starter-data-redisというstarterのpomにjedisが されているのを ましたが、 のこのdemoではjedis importを していません。
redis.clients
jedis
RedisTemplate :
@Configuration
public class StandaloneRedisConfig {
@Bean
@ConfigurationProperties(prefix = "spring.redis.lettuce.pool")
@Scope(value = "prototype")
public GenericObjectPoolConfig redisPool(){
return new GenericObjectPoolConfig();
}
@Bean
@ConfigurationProperties(prefix = "spring.redis.redis-a")
public RedisStandaloneConfiguration standaloneConfigurationA() {
return new RedisStandaloneConfiguration();
}
@Bean
@ConfigurationProperties(prefix = "spring.redis.redis-b")
public RedisStandaloneConfiguration standaloneConfigurationB() {
return new RedisStandaloneConfiguration();
}
@Bean
@ConfigurationProperties(prefix = "spring.redis.redis-c")
public RedisStandaloneConfiguration standaloneConfigurationC() {
return new RedisStandaloneConfiguration();
}
@Bean
public JedisConnectionFactory standaloneFactoryA(){
JedisClientConfiguration poolConfig = JedisClientConfiguration.builder().usePooling().poolConfig(redisPool()).build();
return new JedisConnectionFactory(standaloneConfigurationA(), poolConfig);
}
@Bean
public JedisConnectionFactory standaloneFactoryB(){
JedisClientConfiguration poolConfig = JedisClientConfiguration.builder().usePooling().poolConfig(redisPool()).build();
return new JedisConnectionFactory(standaloneConfigurationB(), poolConfig);
}
@Bean
public JedisConnectionFactory standaloneFactoryC(){
JedisClientConfiguration poolConfig = JedisClientConfiguration.builder().usePooling().poolConfig(redisPool()).build();
return new JedisConnectionFactory(standaloneConfigurationC(), poolConfig);
}
@Bean
public RedisTemplate StringRedisTemplateA(){
RedisTemplate template = getRedisTemplate();
template.setConnectionFactory(standaloneFactoryA());
return template;
}
@Bean
public RedisTemplate StringRedisTemplateB(){
RedisTemplate template = getRedisTemplate();
template.setConnectionFactory(standaloneFactoryB());
return template;
}
@Bean
public RedisTemplate StringRedisTemplateC(){
RedisTemplate template = getRedisTemplate();
template.setConnectionFactory(standaloneFactoryC());
return template;
}
private RedisTemplate getRedisTemplate(){
RedisTemplate template = new RedisTemplate<>();
template.setValueSerializer(new GenericFastJsonRedisSerializer());
template.setValueSerializer(new StringRedisSerializer());
return template;
}
}
Lettuce
lettuce はpomにredisClientのパッケージを する はない
RedisTemplate :
@Configuration
public class LettuceRedisConfig {
@Bean
@ConfigurationProperties(prefix = "spring.redis.lettuce.pool")
@Scope(value = "prototype")
public GenericObjectPoolConfig redisPool(){
return new GenericObjectPoolConfig();
}
@Bean
@ConfigurationProperties(prefix = "spring.redis.redis-a")
public RedisStandaloneConfiguration redisConfigA(){
return new RedisStandaloneConfiguration();
}
@Bean
@ConfigurationProperties(prefix = "spring.redis.redis-b")
public RedisStandaloneConfiguration redisConfigB(){
return new RedisStandaloneConfiguration();
}
@Bean
@ConfigurationProperties(prefix = "spring.redis.redis-c")
public RedisStandaloneConfiguration redisConfigC(){
return new RedisStandaloneConfiguration();
}
@Bean
@Primary
public LettuceConnectionFactory factoryA(){
GenericObjectPoolConfig config = config();
LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder()
.poolConfig(config).commandTimeout(Duration.ofMillis(config.getMaxWaitMillis())).build();
return new LettuceConnectionFactory(redisConfigA(), clientConfiguration);
}
@Bean
public LettuceConnectionFactory factoryB(){
GenericObjectPoolConfig config = config();
LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder()
.poolConfig(config).commandTimeout(Duration.ofMillis(config.getMaxWaitMillis())).build();
return new LettuceConnectionFactory(redisConfigB(), clientConfiguration);
}
@Bean
public LettuceConnectionFactory factoryC(){
GenericObjectPoolConfig config = config();
LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder()
.poolConfig(config).commandTimeout(Duration.ofMillis(config.getMaxWaitMillis())).build();
return new LettuceConnectionFactory(redisConfigC(), clientConfiguration);
}
@Bean
public StringRedisTemplate redisTemplateA(){
StringRedisTemplate template = getRedisTemplate();
template.setConnectionFactory(factoryA());
return template;
}
@Bean
public StringRedisTemplate redisTemplateB(){
StringRedisTemplate template = getRedisTemplate();
template.setConnectionFactory(factoryB());
return template;
}
@Bean
public StringRedisTemplate redisTemplateC(){
StringRedisTemplate template = getRedisTemplate();
template.setConnectionFactory(factoryC());
return template;
}
private StringRedisTemplate getRedisTemplate(){
StringRedisTemplate template = new StringRedisTemplate();
template.setValueSerializer(new GenericFastJsonRedisSerializer());
template.setValueSerializer(new StringRedisSerializer());
return template;
}
}
,