详解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,并传给父类即可。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。