1、新建一个springboot项目
2、添加redis依赖包
可以在新建项目的时候就选上
也可以建完项目以后手动导入pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
3、配置
在application.yml文件中进行如下配置:
spring:
redis:
host: 121.36.42.22
port: 6380
# 数据库索引
database: 0
password: CsiFlow!@#680
# 连接超时时间
connect-timeout: 10s
# springboot2.x之后把jedis换成了lettuce
lettuce:
pool:
min-idle: 0 # 最小空闲连接
max-idle: 8 # 最大空闲连接
max-active: 8 # 连接池的最大连接数
max-wait: -1ms # 连接池的最大阻塞等待时间(负值表示没有限制
PS: 在springboot2.x之后把原来使用的jedis换成了lettuce,因为jedis线程不安全,而lettuce的底层是netty,新能更高。并且jedis从spring-boot-starter-data-redis源码中扣除了,也就是springboot2.x以后只能用lettuce了。
4、看自动配置的源码
应该找到RedisAutoConfiguration才对
但是我们在这里找到了这个文件
找到了其配置文件所在类RedisProperties
在这里可以看到都有什么可配置项(在application.yml里),有什么已经配好默认值了。
@AutoConfiguration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class) //指明配置文件
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate") //ConditionalOnMissingBean注解,如果我们自己写了一个redisTemplate的bean就替代默认的这个
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { //默认的redisTemplate是<Object,Object>类型的,但是我们一般会自己写一个<String,Object>类型的
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean //因为String类型是redis最常用的类型,所以单独给这个类型写了一个redisTemplate
@ConditionalOnMissingBean
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
return new StringRedisTemplate(redisConnectionFactory);
}
}
5、常用操作
先@Autowired注入自动配置好的redisTemplate,然后redisTemplate可以调用一系列方法,这些方法对应我们redis里的指令。
6、上手测试
@SpringBootTest
class SpringbootMybatisApplicationTests {
@Resource
RedisTemplate redisTemplate;
@Test
public void test01(){
redisTemplate.opsForValue().set("mykey","Tuesday");
System.out.println(redisTemplate.opsForValue().get("mykey"));
}
}
测试成功
所以数据写到我们在application.yml里配置的db0里面去了吗?是这样的。但是前面有一串符号,这是因为我们没有序列化导致的