提示:
springboot提供了一套鏈接redis的api,也就是個jar包,用到的連接類叫做LettuceConnectionConfiguration,所以我們引入pom時是這樣的
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
如果你想使用其他鏈接redis的api,最常用的基本上就是Jedis的JedisConnectionFactory那么你就需要引入jedis,然后exclusions掉springboot提供做Lettuce:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
1.配置實現SpringBoot集成Redis(只需兩步)
1.最簡單的配置就是在application.propertity中配置
#cache指定緩存類型 spring.cache.type=REDIS #data-redis spring.redis.database=15 spring.redis.password= spring.redis.host=192.168.**.** spring.redis.port=6379 spring.redis.timeout=2000 spring.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 @EnableCaching public 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 List<JedisClientConfigurationBuilderCustomizer> builderCustomizers; JedisConnectionConfiguration(RedisProperties properties, ObjectProvider<RedisSentinelConfiguration> sentinelConfiguration, ObjectProvider<RedisClusterConfiguration> clusterConfiguration, ObjectProvider<List<JedisClientConfigurationBuilderCustomizer>> 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 //為什么的我這個配置一直不生效呢? 我想你心里應該有答案了
如果解決了你的問題,幫忙點個贊
