本文介绍: 以上配置中,train–db 和 user–db就是两个不同的Redis数据库,我们可以根据需要配置任意个。本文介绍在spring boot下,如何为redis配置多个database数据源。pom.xml文件:spring boot版本使用的是2.6.10版本。2、配置类:RedisConfig.java。
本文介绍在spring boot下,如何为redis配置多个database数据源。
一、pom依赖
pom.xml文件:spring boot版本使用的是2.6.10版本。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.10</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!--
1.x 版本默认采用的连接池技术的Jedis
2.0 以上的版本默认连接池是Lettuce
如果采用Jedis,需要排除Lettuce的依赖
-->
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.1</version>
</dependency>
二、配置Redis
1、application.yml配置文件:
##################### Redis配置 ######################
redis:
# 此处填写你的Redis服务器的实际IP端口号
host: 127.0.0.1
port: 6379
# 此处填写登录Redis的真实密码
password: 123456
# 连接超时时间,毫秒
timeout: 3000
jedis:
pool:
# 最大连接数
max-active: 50
# 最大连接阻塞等待时间,毫秒
max-wait: 1000
# 最大空闲连接数
max-idle: 20
# 最小空闲连接数,默认0
min-idle: 5
# 在获取连接时是否检查有效性
test-on-borrow: true
# 在归还连接时是否检查有效性
test-on-return: false
database:
# 列车信息数据库索引
train-db: 4
# 用户信息数据库索引
user-db: 2
以上配置中,train–db 和 user–db就是两个不同的Redis数据库,我们可以根据需要配置任意个。
database:
# 列车信息数据库索引
train-db: 4
# 用户信息数据库索引
user-db: 2
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.RedisPassword;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
import java.time.Duration;
@Configuration
public class RedisConfig {
@Value("${redis.host}")
private String hostName;
@Value("${redis.port}")
private int port;
@Value("${redis.password}")
private String password;
@Value("${redis.database.ilstatus-db}")
private int databaseILStatus;
@Value("${redis.database.atsstatus-db}")
private int databaseATSStatus;
@Value("${redis.database.user-db}")
private int databaseUser;
@Value("${redis.database.train-db}")
private int databaseTrain;
@Value("${redis.jedis.pool.max-active}")
private int maxTotal; //连接池中最大连接数
@Value("${redis.jedis.pool.max-idle}")
private int maxIdle; //最大空闲连接数
@Value("${redis.jedis.pool.min-idle}")
private int minIdle; //最小空闲连接数
@Value("${redis.jedis.pool.max-wait}")
private int maxWait; //当池内没有可用的连接时,最大等待时间
@Value("${redis.jedis.pool.test-on-borrow}")
private boolean testOnBorrow; //在获取连接时是否检查有效性
@Value("${redis.jedis.pool.test-on-return}")
private boolean testOnReturn; //在归还连接时是否检查有效性
public static final String REDIS_TEMPLATE_USER = "userRedisTemplate";
public static final String REDIS_TEMPLATE_TRAIN = "trainRedisTemplate";
@Bean(REDIS_TEMPLATE_USER)
public RedisTemplate<String, Object> userRedisTemplate() {
return getRedisTemplate(databaseUser);
}
@Bean(REDIS_TEMPLATE_TRAIN)
public RedisTemplate<String, Object> trainRedisTemplate() {
return getRedisTemplate(databaseTrain);
}
private RedisTemplate<String, Object> getRedisTemplate(int database) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(getRedisConnectionFactory(database));
/** key采用StringRedisSerializer序列化 */
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setKeySerializer(new StringRedisSerializer());
/** 设置hash key和value的序列化方式 */
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
private RedisConnectionFactory getRedisConnectionFactory(int database) {
/** 单机配置 + 客户端配置 = jedis连接工厂 */
JedisConnectionFactory jedisConnectionFactory =
new JedisConnectionFactory(getRedisStandaloneConfig(database), getJedisClientConfig());
jedisConnectionFactory.afterPropertiesSet();
return jedisConnectionFactory;
}
private RedisStandaloneConfiguration getRedisStandaloneConfig(int database) {
RedisStandaloneConfiguration redisStandaloneConfig = new RedisStandaloneConfiguration();
redisStandaloneConfig.setHostName(hostName);
redisStandaloneConfig.setPort(port);
redisStandaloneConfig.setPassword(RedisPassword.of(password));
redisStandaloneConfig.setDatabase(database);
return redisStandaloneConfig;
}
private JedisClientConfiguration getJedisClientConfig() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(maxTotal); //连接池中最大连接数
jedisPoolConfig.setMaxIdle(maxIdle); //最大空闲连接数
jedisPoolConfig.setMinIdle(minIdle); //最小空闲连接数
//当池内没有可用的连接时,最大等待时间
jedisPoolConfig.setMaxWait(Duration.ofMillis(maxWait));
//在获取连接时是否检查有效性, 默认false
jedisPoolConfig.setTestOnBorrow(testOnBorrow);
//在归还连接时是否检查有效性, 默认false
jedisPoolConfig.setTestOnReturn(testOnReturn);
JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpccb =
(JedisClientConfiguration.JedisPoolingClientConfigurationBuilder)JedisClientConfiguration.builder();
jpccb.poolConfig(jedisPoolConfig);
return jpccb.build();
}
}
三、使用Redis
UserRedisProxy.java:
@Component
public class UserRedisProxy {
@Resource(name = RedisConfig.REDIS_TEMPLATE_USER)
private RedisTemplate<String, Object> redisTemplate;
public Object getUserInfo(String key) {
return redisTemplate.opsForValue().get(key);
}
}
TrainRedisProxy.java:
@Component
public class TrainRedisProxy {
@Resource(name = RedisConfig.REDIS_TEMPLATE_TRAIN)
private RedisTemplate<String, Object> redisTemplate;
public Object getTrainInfo(String key) {
return redisTemplate.opsForValue().get(key);
}
}
原文地址:https://blog.csdn.net/minihuabei/article/details/130336537
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_37948.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。