hooyantsing's Blog

25_SpringBoot集成Redis

字数统计: 574阅读时长: 2 min
2020/08/17

25 SpringBoot集成Redis

Redis最新超详细版教程通俗易懂

SpringBoot整合

在 SpringBoot2.x 以后,原来使用的 jedis 被替换为 lettuce。

jedis 和 lettuce 区别:

  • jedis:采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全,使用 jedis pool 连接池。更像 BIO 模式
  • lettuce:采用netty,实例可以在多个线程中共享,不存在线程不安全的情况。更像 NIO 模式。
    根据pom文件引入的依赖,垂直查找可以看到以下内容:

redis -> letture -> nettyfe88ed1a95093adac4217ae890f78413.png

a95084c5e5d73d4b4fce8fa55fcae812.png

d0ba35c1e0d113cd104bd81f2536ccb2.png

  • SpringBoot 所有的配置类,都有一个自动配置类 -> RedisAutoConfiguration
  • 自动配置类都会绑定一个 properties 配置文件 -> RedisProperties
    663cbe8fa3f97af272bb88697ba58a8e.png
源码分析:

RedisAutoConfiguration.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 // ConditionalOnMissingBean注解,当名为redisTemplate的Bean不存在时,执行这个方法。
// 也就说,我们可以自定义个redisTemplate来替换这个默认的

@Bean
@ConditionalOnMissingBean(
name = {"redisTemplate"}
)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate();

// 默认的 RedisTemplate
// 两个泛型都是 Object 的类型,后面使用需要强制转换

template.setConnectionFactory(redisConnectionFactory);
return template;
}

// 由于 String 是 redis 中最常用的类型,因此单独提出了一个 bean
// 如果使用 String 类型,请直接使用这个方法。

@Bean
@ConditionalOnMissingBean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
配置Redis

d797b28a3704550ce704d47ae954955c.png

使用 lettuce 那一套,不要使用 jedis 那一套,因为 SpringBoot2.x默认使用的是lettuce,jedis在源码里就没注入成功,所以jedis配置均不生效。

Springboot整合Redis,测试

1、导入依赖

pom.xml

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2、配置连接

application.properties

1
2
3
# 配置 Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379

3、测试连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.kuang;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisTemplate;

@SpringBootTest
class Redis02SpringbootApplicationTests {

@Autowired
private RedisTemplate redisTemplate;

@Test
void contextLoads() {
/*
对应 Redis 数据类型:
opsForValue -> String
opsForList -> List
opsForSet -> Set
opsForHash -> Hash
opsForZSet -> ZSet

opsForGeo -> Geo
opsForHyperLogLog -> Hyperloglog

*/

// CRUD 常用 API
redisTemplate.opsForValue().set("name","hooy");

/*
// 获取连接
RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
// 清空当前数据库
connection.flushDb();
// 清空全部数据库
connection.flushAll();
*/

System.out.println(redisTemplate.opsForValue().get("name"));

}

}
CATALOG
  1. 1. 25 SpringBoot集成Redis
  2. 2. SpringBoot整合
    1. 2.0.0.1. 源码分析:
    2. 2.0.0.2. 配置Redis
    3. 2.0.0.3. Springboot整合Redis,测试