1. 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.9.0</version>
</dependency>
2.编写配置信息
redisManagement:
dbnum: 2
redis1:
database: 0
host: localhost
password:
port: 6379
timeout: 0
redis2:
database: 1
host: localhost
password:
port: 6379
timeout: 0
3. 编写RedisManager
@Configuration
public class RedisManagment {
Logger logger = LogManager.getLogger(RedisManagment.class);
@Value("${redisManagement.dbnum}")
private int maxnum;
@Autowired
private Environment environment;
@Bean("redisConnections")
public StringRedisTemplate[] RedisConnections(){
logger.info("###### START 初始化 Redis 连接池 START ######");
StringRedisTemplate[] dbs = new StringRedisTemplate[maxnum];
for (int i = 0; i < maxnum; i++) {
String pre = "redisManagement.redis"+(i+1)+".";
dbs[i] = redisTemplateObject(i,environment.getProperty(pre+"host"),environment.getProperty(pre+"password"),
environment.getProperty(pre+"port",Integer.class));
}
logger.info("###### END 初始化 Redis 连接池 END ######");
return dbs;
}
private StringRedisTemplate redisTemplateObject(Integer dbIndex,String host,String pwd,int port) {
StringRedisTemplate redisTemplateObject = new StringRedisTemplate();
redisTemplateObject.setConnectionFactory(redisConnectionFactory(jedisPoolConfig(), dbIndex,host,pwd,port));
setSerializer(redisTemplateObject);
redisTemplateObject.afterPropertiesSet();
return redisTemplateObject;
}
/**
* 连接池配置信息
*/
private JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setTestWhileIdle(true);
poolConfig.setNumTestsPerEvictionRun(10);
poolConfig.setTimeBetweenEvictionRunsMillis(60000);
// 当池内没有可用的连接时,最大等待时间
poolConfig.setMaxWaitMillis(10000);
// ------其他属性根据需要自行添加-------------
return poolConfig;
}
/**
* jedis连接工厂
*/
private RedisConnectionFactory redisConnectionFactory(JedisPoolConfig jedisPoolConfig, int db,String hostName,String passWord,int port) {
// 单机版jedis
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
// 设置redis服务器的host或者ip地址
redisStandaloneConfiguration.setHostName(hostName);
// 设置默认使用的数据库
redisStandaloneConfiguration.setDatabase(db);
// 设置密码
redisStandaloneConfiguration.setPassword(RedisPassword.of(passWord));
// 设置redis的服务的端口号
redisStandaloneConfiguration.setPort(port);
// 获得默认的连接池构造器
JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration
.builder();
// 指定jedisPoolConifig来修改默认的连接池构造器)
jpcb.poolConfig(jedisPoolConfig);
// 通过构造器来构造jedis客户端配置
JedisClientConfiguration jedisClientConfiguration = jpcb.build();
// 单机配置 + 客户端配置 = jedis连接工厂
JedisConnectionFactory factory = new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
//JedisConnectionFactory需要调用AfterProperties初始化
factory.afterPropertiesSet();
return factory;
}
/**
* 设置序列化
*/
private void setSerializer(StringRedisTemplate template) {
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
}
}
4. 测试
@SpringBootTest
class SellcloudApplicationTests {
@Resource(name = "redisConnections")
StringRedisTemplate[] templates;
@Test
void EnvironmentTest(){
templates[0].delete("hzkey");
templates[1].delete("hzkey");
for (int i = 0; i < templates.length; i++) {
StringRedisTemplate db = templates[i];
System.out.println(db.opsForValue().get("hzkey"));
db.opsForValue().set("hzkey","hzvalue");
System.out.println(db.opsForValue().get("hzkey"));
}
}
}
参考链接:https://blog.csdn.net/jjjackjack/article/details/122959435