初步使用
在pom.xml中加入redis相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
然后在properties文件中配置配置文件
spring.redis.host=xxx
spring.redis.port=6379
spring.redis.password=xxxx
spring.redis.pool.max-active=-1
spring.redis.pool.max-wait=-1
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.timeout=1000
然后就可以直接使用stringRedisTemplate
来向Redis里面存取数据了:
@Autowired
private StringRedisTemplate stringRedisTemplate;
// 保存字符串
@Test
public void test() {
stringRedisTemplate.opsForValue().set("myStr", "abcdefg");
Assert.assertEquals("abcdefg", stringRedisTemplate.opsForValue().get("myStr"));
}
简单的使用就是这么简单,甚至于连stringRedisTemplate
是什么时候注入的都不知道,就能直接用了。所以还是稍微探究一下他到底是怎么肥似。
探究一下
首页探究到了这个类RedisProperties
:
看一下发现这几点:
1.类上面有个注解@ConfigurationProperties(prefix = "spring.redis")
这里是封装了Redis所有配置文件的一个类。所以properties文件中怎么写Redis的配置,从这个类就能看出来了。首先一个,配置都要以spring.redis为前缀,里面能配置的内容包括:host、端口、密码、连接池、集群啥的都有。
2.这个类上面只有@ConfigurationProperties注解,并没有注入IOC相关的注解,所以单看这个类他是没有注入IOC容器的。
3.这里面有3个对象(pool、sentinel、cluster),所以如果配置host 可以写成spring.redis.host=localhost
,但是要配置连接池的放就要看一下Pool对象有什么属性了,所以连接池的配置要写成spring.redis.pool.maxIdle=8
, 但是在properties文件中去写spring.redis.pool.
后面提示的是max-idle,意思应该是一个意思,应该是哪里做了映射,但是我没找到。所以还是以提示的为准。
属性配好了,下面就是找到根据属性来连Redis了。接下来在RedisProperties
的同级目录下,找到个RedisAutoConfiguration
类:
看这个@EnableConfigurationProperties(RedisProperties.class)
有了这个Enable才将上面看到的RedisProperties类注入到IOC容器。注意这里的@EnableConfigurationProperties
注解,他是配合上面RedisProperties类中的@ConfigurationProperties注解一起使用,才能将RedisProperties
注入到IOC的。因为上面的RedisProperties类上没有注入IOC的任何相关注解,只有一个@ConfigurationProperties
,所以RedisProperties
并不是一定会注入IOC,@EnableConfigurationProperties
相当于把使用 @ConfigurationProperties
的类进行了一次注入。
RedisAutoConfiguration
类里面有两个内部类:RedisConnectionConfiguration
、RedisConfiguration
:
先看RedisConnectionConfiguration
类:
类上的注释说了,这是一个Redis连接配置类。里面是三种配置方式的配置:
- RedisProperties properties 简单配置,单机版本
- RedisSentinelConfiguration sentinelConfiguration 主从版本配置
- RedisClusterConfiguration clusterConfiguration 集群版本配置
这几个配置文件下面就是一个注入到IOC的JedisConnectionFactory
,他是Redis的连接工厂类,主要作用就是根据配置文件中的配置来取Redis各种连接。
再下面一个类是RedisConfiguration
:
注释里面说这是一个标准的Redis配置类。
这个类里面配置了2个Bean,redisTemplate
和stringRedisTemplate
,终于找到他们了,上面说的stringRedisTemplate
是在这里注入到IOC的。
但是这2个Bean的配置上面都有一个@ConditionalOnMissingBean
注解,看字面意思大概能猜的到,意思是只有当我们没有注入括号里面指定的Bean对象的时候,这2个类上面的@Bean
才起作用。所以当我们不手动进行任何配置的时候仍然可以使用redisTemplate
和stringRedisTemplate
。