详解springboot配置多个redis连接
一、springbootnosql简介
SpringData提供其他项目,用来帮你使用各种各样的NoSQL技术,包括MongoDB,Neo4J,Elasticsearch,Solr,Redis,Gemfire,Couchbase和Cassandra。SpringBoot为Redis,MongoDB,Elasticsearch,Solr和Gemfire提供自动配置。你可以充分利用其他项目,但你需要自己配置它们。
1.1、Redis
Redis是一个缓存,消息中间件及具有丰富特性的键值存储系统。SpringBoot为Jedis客户端库和由SpringDataRedis提供的基于Jedis客户端的抽象提供自动配置。spring-boot-starter-redis'StarterPOM'为收集依赖提供一种便利的方式。
Redis添加maven依赖
org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-redis
1.2连接Redis
你可以注入一个自动配置的RedisConnectionFactory,StringRedisTemplate或普通的跟其他SpringBean相同的RedisTemplate实例。默认情况下,这个实例将尝试使用localhost:6379连接Redis服务器。
@Component
publicclassMyBean{
privateStringRedisTemplatetemplate;
@Autowired
publicMyBean(StringRedisTemplatetemplate){
this.template=template;
}
//...
}
如果你添加一个你自己的任何自动配置类型的@Bean,它将替换默认的(除了RedisTemplate的情况,它是根据bean的名称'redisTemplate'而不是它的类型进行排除的)。如果在classpath路径下存在commons-pool2,默认你会获得一个连接池工厂。
1.3建立多个redis连接
使用redis的默认配置可以连接到redis中的0库中,如果指定库连接需要配置indexdb,同时如果需要连接多个redis服务,也需要同时配置多个数据源
1.3.1、application.yml文件中增加:
@Component
publicclassMyBean{
privateStringRedisTemplatetemplate;
@Autowired
publicMyBean(StringRedisTemplatetemplate){
this.template=template;
}
//...
}
1.3.2、创建redisconfiguration
@Configuration
publicclassRedis137_11Configuration{
@Bean(name="redis123Template")
publicStringRedisTemplateredisTemplate(
@Value("${redis123.hostName}")StringhostName,
@Value("${redis123.port}")intport,
@Value("${redis123.password}")Stringpassword,
@Value("${redis123.maxIdle}")intmaxIdle,
@Value("${redis123.maxTotal}")intmaxTotal,
@Value("${redis123.index}")intindex,
@Value("${redis123.maxWaitMillis}")longmaxWaitMillis,
@Value("${redis123.testOnBorrow}")booleantestOnBorrow){
StringRedisTemplatetemple=newStringRedisTemplate();
temple.setConnectionFactory(connectionFactory(hostName,port,password,
maxIdle,maxTotal,index,maxWaitMillis,testOnBorrow));
returntemple;
}
publicRedisConnectionFactoryconnectionFactory(StringhostName,intport,
Stringpassword,intmaxIdle,intmaxTotal,intindex,
longmaxWaitMillis,booleantestOnBorrow){
JedisConnectionFactoryjedis=newJedisConnectionFactory();
jedis.setHostName(hostName);
jedis.setPort(port);
if(!StringUtils.isEmpty(password)){
jedis.setPassword(password);
}
if(index!=0){
jedis.setDatabase(index);
}
jedis.setPoolConfig(poolCofig(maxIdle,maxTotal,maxWaitMillis,
testOnBorrow));
//初始化连接pool
jedis.afterPropertiesSet();
RedisConnectionFactoryfactory=jedis;
returnfactory;
}
publicJedisPoolConfigpoolCofig(intmaxIdle,intmaxTotal,
longmaxWaitMillis,booleantestOnBorrow){
JedisPoolConfigpoolCofig=newJedisPoolConfig();
poolCofig.setMaxIdle(maxIdle);
poolCofig.setMaxTotal(maxTotal);
poolCofig.setMaxWaitMillis(maxWaitMillis);
poolCofig.setTestOnBorrow(testOnBorrow);
returnpoolCofig;
}
}
1.3.3、声明redis抽象基类,创建redis的操作方法
publicabstractclassAbRedisConfiguration{
protectedStringRedisTemplatetemple;
publicvoidsetData(Stringkey,Stringvalue){
getTemple().opsForValue().set(key,value);
}
publicStringgetData(Stringkey){
returngetTemple().opsForValue().get(key);
}
publicStringRedisTemplategetTemple(){
returntemple;
}
}
1.3.4、根据数据源,创建不同的子类@Component
publicclassRedis123extendsAbRedisConfiguration{
@Resource(name="redis123Template")
privateStringRedisTemplatetemple;
publicStringRedisTemplategetTemple(){
returntemple;
}
}
ps:类和子类中同时声明了getTemple方法和StringRedisTemple属性,子类通过重写父类的getTeimple方法,把子类的自己StringRedisTemple属性传给父类,父类通过子类传递过来的StringRedisTemple使用不通的数据链接来操作缓存。至此,父类完成所有的操作方法,而当需要创建一个数据库连接时,只需要在创建一个子类,被声明自己的StringRedisTemple,并传给父类即可。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。