博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springBoot集成Redis遇到的坑(择库)源码分析为什么择库失败
阅读量:5247 次
发布时间:2019-06-14

本文共 4254 字,大约阅读时间需要 14 分钟。

提示:

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 List
builderCustomizers; 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  //为什么的我这个配置一直不生效呢?  我想你心里应该有答案了

 如果解决了你的问题,帮忙点个赞

转载于:https://www.cnblogs.com/UncleWang001/p/9964764.html

你可能感兴趣的文章
UVA11374 Airport Express
查看>>
P1373 小a和uim之大逃离 四维dp,维护差值
查看>>
NOIP2015 运输计划 树上差分+树剖
查看>>
P3950 部落冲突 树链剖分
查看>>
读书汇总贴
查看>>
微信小程序 movable-view组件应用:可拖动悬浮框_返回首页
查看>>
MPT树详解
查看>>
空间分析开源库GEOS
查看>>
RQNOJ八月赛
查看>>
前端各种mate积累
查看>>
jQuery 1.7 发布了
查看>>
Python(软件目录结构规范)
查看>>
Windows多线程入门のCreateThread与_beginthreadex本质区别(转)
查看>>
Nginx配置文件(nginx.conf)配置详解1
查看>>
linux php编译安装
查看>>
name phone email正则表达式
查看>>
「Unity」委托 将方法作为参数传递
查看>>
重置GNOME-TERMINAL
查看>>
redis哨兵集群、docker入门
查看>>
hihoCoder 1233 : Boxes(盒子)
查看>>