提示:
springboot提供了一套链接redis的api,也就是个jar包,用到的连接类叫做LettuceConnectionConfiguration,所以我们引入pom时是这样的
org.springframework.boot spring-boot-starter-data-redis
如果你想使用其他链接redis的api,最常用的基本上就是Jedis的JedisConnectionFactory那么你就需要引入jedis,然后exclusions掉springboot提供做Lettuce:
org.springframework.boot spring-boot-starter-data-redis io.lettuce lettuce-core redis.clients jedis
1.配置实现SpringBoot集成Redis(只需两步)
1.最简单的配置就是在application.propertity中配置
#cache指定缓存类型spring.cache.type=REDIS#data-redisspring.redis.database=15spring.redis.password=spring.redis.host=192.168.**.**spring.redis.port=6379spring.redis.timeout=2000spring.redis.jedis.pool.max-active=8 spring.redis.jedis.pool.max-idle=8 spring.redis.jedis.pool.max-wait=-1 spring.redis.jedis.pool.min-idle=0
2.启动类开启缓存
@SpringBootApplication@EnableCachingpublic class EvaluationApplication {}
好了,配置好了!!
2.你有没有想过为啥SpringBoot集成Redis的配置那么简单?
原因:
1.SB之所以好用就是因为SB替我们做了很多以前我们需要手动在Spring中做的工作。
2.SB中默认是带了一个jar包:org.springframework.boot.autoconfigure这个包包含了大部分SpringBoot默认实现的功能,感兴趣的童鞋可以自己看下
3.我们可以在这个package org.springframework.boot.autoconfigure.data.redis;下看到SB为我们默认实现的集成Redis的代码:
4.我们可以看到有个JedisConnectionConfiguration类
@Configuration //启动加载@ConditionalOnClass({ GenericObjectPool.class, JedisConnection.class, Jedis.class })class JedisConnectionConfiguration extends RedisConnectionConfiguration { private final RedisProperties properties; private final ListbuilderCustomizers; JedisConnectionConfiguration(RedisProperties properties, ObjectProvider sentinelConfiguration, ObjectProvider clusterConfiguration, ObjectProvider
> builderCustomizers) { super(properties, sentinelConfiguration, clusterConfiguration); this.properties = properties; this.builderCustomizers = builderCustomizers .getIfAvailable(Collections::emptyList); } @Bean //启动加载JedisConnectionFactory放入spring的容器中 @ConditionalOnMissingBean(RedisConnectionFactory.class) public JedisConnectionFactory redisConnectionFactory() throws UnknownHostException { return createJedisConnectionFactory(); } //我们可以看到SB为我们默认提供了三种加载方式 private JedisConnectionFactory createJedisConnectionFactory() { JedisClientConfiguration clientConfiguration = getJedisClientConfiguration(); if (getSentinelConfig() != null) { //如果配置文件中配置了多个节点,则以多节点方式加载 此方式上面配置部分无效,详情看源码 return new JedisConnectionFactory(getSentinelConfig(), clientConfiguration); } if (getClusterConfiguration() != null) { //如果配置了集群则以集群方式加载 此方式上面配置部分无效,详情看源码 return new JedisConnectionFactory(getClusterConfiguration(), clientConfiguration); } return new JedisConnectionFactory(getStandaloneConfig(), clientConfiguration);//以单节点的方式加载redis配置,上面配置生效 }
5.附上最后一种方式加载配置的源码
protected final RedisStandaloneConfiguration getStandaloneConfig() { RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(); if (StringUtils.hasText(this.properties.getUrl())) { ConnectionInfo connectionInfo = parseUrl(this.properties.getUrl()); config.setHostName(connectionInfo.getHostName()); config.setPort(connectionInfo.getPort()); config.setPassword(RedisPassword.of(connectionInfo.getPassword())); } else { config.setHostName(this.properties.getHost()); //这个propertity加载的就是上面我们贴出来的配置,源码可以看到上面图片中有个RedisPropertity类,配置文件中的配置就是根据这个类配置的 config.setPort(this.properties.getPort()); config.setPassword(RedisPassword.of(this.properties.getPassword())); } config.setDatabase(this.properties.getDatabase()); return config; }
3.那么问题来了,为什么我一直择库失败呢?
spring.redis.database=15 //为什么的我这个配置一直不生效呢? 我想你心里应该有答案了
如果解决了你的问题,帮忙点个赞