一、背景
如果业务需要一个应用链接不同的redis,就不能用SpringBoot的默认配置了,以下是SpringBoot配置多个redis实战教程,有需要的同学可以作为参考。
二、相关配置
1.整体的相关目录结构
2.pom.xml 依赖添加redis及jedis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- spring2.X集成redis所需common-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
3.application.yam配置
spring:
redis:
redis-user:
host: 127.0.0.1
port: 6379
password:
timeout: 10000
jedis:
pool:
max-idle: 8
min-idle: 10
max-active: 100
max-wait: -1
redis-order:
host: 127.0.0.1
port: 7777
password:
timeout: 10000
jedis:
pool:
max-idle: 8
min-idle: 10
max-active: 100
max-wait: -1
4.redis配置加载类
RedisConfigOrder.java
package com.spell.config.redis;
import java.net.UnknownHostException;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
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.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
public class RedisConfigOrder {
@Value("${spring.redis.redis-order.host}")
private String host;
@Value("${spring.redis.redis-order.port}")
private Integer port;
@Primary
@Bean(name = "jedisPoolConfigOrder")
@ConfigurationProperties(prefix = "spring.redis.redis-order.jedis.pool")
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxWaitMillis(10000);
return jedisPoolConfig;
}
@Bean("redisConnectionFactoryOrder")
public RedisConnectionFactory redisConnectionFactory(
@Qualifier("jedisPoolConfigOrder") JedisPoolConfig jedisPoolConfig) {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(host);
// redisStandaloneConfiguration.setPassword(pwd);
redisStandaloneConfiguration.setPort(port);
JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration
.builder();
jpcb.poolConfig(jedisPoolConfig);
JedisClientConfiguration jedisClientConfiguration = jpcb.build();
return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
}
/**
* @name: redisTemplate
* @description: RedisTemplate
* @param redisConnectionFactory
* @return: org.springframework.data.redis.core.RedisTemplate<java.lang.String,java.lang.Object>
* @date: 2020-12-04 13:19
*
*/
@Bean("redisTemplateOrder")
public RedisTemplate<String, Object> redisTemplate(
@Qualifier("redisConnectionFactoryOrder") RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer(Object.class);
// 设置键(key)的序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
// 设置value序列化
redisTemplate.setValueSerializer(serializer);
// 设置HashKey序列化 为啥要hashkey
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
// 设置HashValue序列化
redisTemplate.setHashValueSerializer(serializer);
// 默认序列化
redisTemplate.setDefaultSerializer(new StringRedisSerializer());
return redisTemplate;
}
}
RedisConfigUser.java
package com.spell.config.redis;
import java.net.UnknownHostException;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
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.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
public class RedisConfigUser {
@Value("${spring.redis.redis-user.host}")
private String host;
@Value("${spring.redis.redis-user.port}")
private Integer port;
@Primary
@Bean(name = "jedisPoolConfigUser")
@ConfigurationProperties(prefix = "spring.redis.redis-user.jedis.pool")
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxWaitMillis(10000);
return jedisPoolConfig;
}
@Bean("redisConnectionFactoryUser")
public RedisConnectionFactory redisConnectionFactory(
@Qualifier("jedisPoolConfigUser") JedisPoolConfig jedisPoolConfig) {
RedisStandaloneConfig