有时候我们可能会遇到这样的场景,有多个业务使用redis做缓存。其他业务比较占用资源。由于redis是单线程,所以会影响到主业务,这个时候我们就需要使用不同的redis的库。这个时候通过springboot+redis的多实例配置就可以实现。
Maven依赖
(1)本文使用的redis依赖如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
在application.yml中加入reids 的配置信息
spring:
main-redis:
#redis的地址
host: localhost
#redis 的端口
port: 6379
#redis 的连接超时时间(毫秒)
timeout: 6000
#redis 的密码 默认为空
password:
pool:
#redis 连接池最大连接数
max-active: 10
#redis 连接池最大空闲连接
max-idle: 5
#redis 连接池最大阻塞等待时间
max-wait: 2
#redis 连接池最小空闲连接数
min-idle: 1
lesser-redis:
host: localhost
port: 6333
timeout: 6000
password:
pool:
max-active: 10
max-idle: 5
max-wait: 2
min-idle: 1
项目的目录结构如下:
这里主要提供了三个类进行不同环境的配置;
- RedisAutoConfiguration 自动配置
/**
* @author kmz
*/
@Configuration
@EnableConfigurationProperties({RedisAutoConfiguration.MainRedisProperties.class,RedisAutoConfiguration.LesserRedisProperties.class})
public class RedisAutoConfiguration {
/**
* @Primary 注解告诉Spring遇到多个bean的时候,它为默认
* prefix 告诉spring读取前缀为spring.main-redis的配置信息
*/
@Primary
@ConfigurationProperties(prefix = "spring.main-redis")
public static class MainRedisProperties extends RedisProperties {
}
@ConfigurationProperties(prefix = "spring.lesser-redis")
public static class LesserRedisProperties extends RedisProperties {
}
/**
* 通过配置获取RedisConnectionFactory
* @param mainRedisProperties mainRedis的配置信息
* @return
*/
@Primary
@Bean("mainRedisConnectionFactory")
public static RedisConnectionFactory getMainRedisConnectionFactory(MainRedisProperties mainRedisProperties){
RedisConnectionConfiguration factory = new RedisConnectionConfiguration(mainRedisProperties);
return factory.redisConnectionFactory();
}
/**
* 获取mainredis的StringRedisTemplate实例
* @param redisConnectionFactory 使用@Qulifier指定需要的factory
* @return template
*/
@Primary
@Bean("mainStringRedisTemplate")
public static StringRedisTemplate getMainStringRedisTemplate(
@Qualifier(value = "mainRedisConnectionFactory") RedisConnectionFactory redisConnectionFactory