一. 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
二. application.yml 配置
spring:
redis:
onedb:
host:
port: 6379
password:
database: 10
timeout: 5000
threedb:
host:
port: 6379
password:
database: 14
timeout: 5000
sixdb:
host:
port: 6379
password:
database: 17
timeout: 5000
三. RedisTemplateConfig
package com.ly.backstage.config.database;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.util.StringUtils;
import redis.clients.jedis.JedisPoolConfig;
/**
* @Author: Willis
* @Date: 2020/4/28 10:57
*/
@Configuration
public class RedisTemplateConfig {
//onedb
@Value("${spring.redis.onedb.host}")
private String oneHost;
@Value("${spring.redis.onedb.port}")
private Integer onePort;
@Value("${spring.redis.onedb.password}")
private String onePassword;
@Value("${spring.redis.onedb.database}")
private Integer oneDatabase;
//threedb
@Value("${spring.redis.threedb.host}")
private String threeHost;
@Value("${spring.redis.threedb.port}")
private Integer threePort;
@Value("${spring.redis.threedb.password}")
private String threePassword;
@Value("${spring.redis.threedb.database}")
private Integer threeDataBase;
//sixdb
@Value("${spring.redis.sixdb.host}")
private String sixHost;
@Value("${spring.redis.sixdb.port}")
private Integer sixPort;
@Value("${spring.redis.sixdb.password}")
private String sixPassword;
@Value("${spring.redis.sixdb.database}")
private Integer sixDatabase;
private static final int MAX_IDLE = 200; //最大空闲连接数
private static final int MAX_TOTAL = 1024; //最大连接数
private static final long MAX_WAIT_MILLIS = 10000; //建立连接最长等待时间
//配置工厂
public RedisConnectionFactory connectionFactory(String host, int port, String password, int maxIdle,
int maxTotal, long maxWaitMillis, int index) {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setHostName(host);
jedisConnectionFactory.setPort(port);
if (!StringUtils.isEmpty(password)) {
jedisConnectionFactory.setPassword(password);
}
if (index != 0) {
jedisConnectionFactory.setDatabase(index);
}
jedisConnectionFactory.setPoolConfig(poolConfig(maxIdle, maxTotal, maxWaitMillis, false));
jedisConnectionFactory.afterPropertiesSet();
return jedisConnectionFactory;
}
//连接池配置
public JedisPoolConfig poolConfig(int maxIdle, int maxTotal, long maxWaitMillis, boolean testOnBorrow) {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMaxTotal(maxTotal);
poolConfig.setMaxWaitMillis(maxWaitMillis);
poolConfig.setTestOnBorrow(testOnBorrow);
return poolConfig;
}
@Bean(name = "redisTemplate1")
public StringRedisTemplate redisTemplate1() {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(
connectionFactory(oneHost, onePort, onePassword, MAX_IDLE, MAX_TOTAL, MAX_WAIT_MILLIS, oneDatabase));
return template;
}
@Bean(name = "redisTemplate3")
public StringRedisTemplate redisTemplate3() {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(
connectionFactory(threeHost, threePort, threePassword, MAX_IDLE, MAX_TOTAL, MAX_WAIT_MILLIS, threeDataBase));
return template;
}
@Bean(name = "redisTemplate6")
public StringRedisTemplate redisTemplate6() {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(
connectionFactory(sixHost, sixPort, sixPassword, MAX_IDLE, MAX_TOTAL, MAX_WAIT_MILLIS, sixDatabase));
return template;
}
}
四. 分别调用
@Autowired
@Resource(name = "redisTemplate1")
StringRedisTemplate oneRedis;
@Autowired
@Resource(name = "redisTemplate3")
StringRedisTemplate threeRedis;
@Autowired
@Resource(name = "redisTemplate6")
StringRedisTemplate sixRedis;
五. 额外:当存储数据的key value为json格式时(未验证)
- 引入 fastjson 依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
- 在 RedisTemplateConfig 中,添加序列化方法. 需序列化时调用
public void redisSerializeConfig(StringRedisTemplate template) {
Jackson2JsonRedisSerializer<Object> redisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
redisSerializer.setObjectMapper(om);
template.setKeySerializer(stringRedisSerializer);
template.setValueSerializer(redisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
template.setHashValueSerializer(redisSerializer);
//template.afterPropertiesSet();
}