最近在项目中用到了两个Redis数据源,特此记录一下
一. 添加依赖
<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 配置
例如此处,order 和 user 两个不同的 redis数据源配置信息
spring:
redis:
order:
host: 100.99.202.32
port: 6379
password: NoLife
user:
host: 100.91.221.35
port: 9000
password: NoGame
三.
注意,redisOrderTemplate 和 redisUserTemplate,注入不同的数据源
@Configuration
public class RedisTemplateConfig {
//order
@Value("${spring.redis.order.host}")
private String orderHost;
@Value("${spring.redis.order.port}")
private String orderPort;
@Value("${spring.redis.order.password}")
private String orderPassword;
//user
@Value("${spring.redis.user.host}")
private String userHost;
@Value("${spring.redis.user.port}")
private String userPort;
@Value("${spring.redis.user.password}")
private String userPassword;
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 = "redisOrderTemplate")
public StringRedisTemplate redisOrderTemplate() {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(
connectionFactory(orderHost, Integer.parseInt(orderPort), orderPassword, MAX_IDLE, MAX_TOTAL, MAX_WAIT_MILLIS, 0));
return template;
}
//------------------------------------
@Bean(name = "redisUserTemplate")
public StringRedisTemplate userUserTemplate() {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(
connectionFactory(userHost, Integer.parseInt(userPort), userPassword, MAX_IDLE, MAX_TOTAL, MAX_WAIT_MILLIS, 0));
return template;
}
}四. 分别调用
@Resource(name = "redisOrderTemplate")
StringRedisTemplate redisOrderTemplate;
@Resource(name = "redisUserTemplate")
StringRedisTemplate redisUserTemplate;
对 StringRedisTemplate 的操作极为简单
可参考如下文章即可,不再多余描述
https://blog.csdn.net/m0_37834446/article/details/82224714
五. 额外:当存储数据的key value为json格式时
需对key 和value 进行序列化设置
首先,在pom.xml中引入 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();
}
版权声明:本文为sss1342746626原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。