SpringBoot连接多个redis
参考:
SpringBoot连接多个Redis或者Redis里的多个不同的库-CSDN博客
/**
* redis配置类
*/
@Configuration
public class RedisConfig {
/**
* retemplate相关配置
* @return
*/
@Bean(name = "redis1")
public RedisTemplate<String, Object> createRedisTemplate() {
return createTemplate("192.168.1.198", 6379, 1);
}
/**
* retemplate相关配置
* @return
*/
@Bean(name = "redis2")
public RedisTemplate<String, Object> createRedisTemplate2() {
return createTemplate("192.168.217.129", 6379, 2);
}
/**
* retemplate相关配置
* @return
*/
@Bean(name = "redis3")
public RedisTemplate<String, Object> createRedisTemplate3() {
return createTemplate("192.168.217.130", 6379, 3);
}
public RedisTemplate<String, Object> createTemplate(String ip, int port, int dataBase) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
LettuceConnectionFactory factory = new LettuceConnectionFactory();
factory.setHostName(ip); // 设置Redis主机
factory.setPort(port); // 设置Redis端口
// factory.setPassword(""); // 设置Redis密码(如果有)
factory.setDatabase(dataBase); // 设置Redis数据库索引,默认为0
factory.setTimeout(2000); // 设置连接超时(单位:毫秒)
// 调用 afterPropertiesSet() 确保连接工厂正确初始化
factory.afterPropertiesSet();
template.setConnectionFactory(factory);
//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
// 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jacksonSeial.setObjectMapper(om);
// 值采用json序列化
template.setValueSerializer(jacksonSeial);
//使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
// 设置hash key 和value序列化模式
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(jacksonSeial);
template.afterPropertiesSet();
return template;
}
}
//配置连接池的方法
public RedisTemplate<String, Object> createTemplate2(String ip, int port, int dataBase) {
// 创建 RedisTemplate
RedisTemplate<String, Object> template = new RedisTemplate<>();
// 配置连接池
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMaxTotal(8); // 最大连接数
poolConfig.setMaxIdle(4); // 最大空闲连接数
poolConfig.setMinIdle(2); // 最小空闲连接数
poolConfig.setTestOnBorrow(true); // 获取连接时进行有效性检查
// 配置 Lettuce 连接池
LettucePoolingClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
.poolConfig(poolConfig) // 设置连接池配置
.build();
// 配置 RedisStandaloneConfiguration(指定 Redis 的主机和端口)
RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration(ip, port);
redisConfig.setDatabase(dataBase); // 设置 Redis 数据库索引
// 创建 LettuceConnectionFactory,并传入连接池配置
LettuceConnectionFactory factory = new LettuceConnectionFactory(redisConfig, clientConfig);
// 设置连接超时(单位:毫秒)
factory.setTimeout(2000);
factory.afterPropertiesSet(); // 确保连接工厂正确初始化
// 设置连接工厂到 RedisTemplate
template.setConnectionFactory(factory);
// 使用 Jackson2JsonRedisSerializer 来序列化和反序列化 Redis 的值
Jackson2JsonRedisSerializer<Object> jacksonSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
template.setValueSerializer(jacksonSerializer);
// 使用 StringRedisSerializer 来序列化和反序列化 Redis 的键
template.setKeySerializer(new StringRedisSerializer());
// 配置 Hash 类型的键和值的序列化方式
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(jacksonSerializer);
// 确保所有属性都正确设置
template.afterPropertiesSet();
return template;
}