Spring Boot 配置 Redis

作为目前最火的的NoSql数据库,Redis现在已成为后台开发人员的标配,本文主要主要介绍SpringBoot 2.*Redis 的整合。

一、Spring Data Redis

Spring Boot 中,默认集成的 RedisSpring Data Redis,默认底层的连接池使用了 lettuce ,开发者可以自行修改为自己的熟悉的,例如 Jedis

Spring Data Redis 针对 Redis 提供了非常方便的操作模板 RedisTemplate

1.1 RedisTemplate中定义了5种数据结构操作

1
2
3
4
5
redisTemplate.opsForValue();  //操作字符串
redisTemplate.opsForHash();   //操作hash
redisTemplate.opsForList();   //操作list
redisTemplate.opsForSet();   //操作set
redisTemplate.opsForZSet();   //操作有序set

当然,我们平时用的最多的可能是StringRedisTemplate,那这个StringRedisTemplate是何许人也?

1.2 StringRedisTemplateRedisTemplate

  1. StringRedisTemplate继承自RedisTemplate;
  2. 两者的数据是不共通的StringRedisTemplate只能管理StringRedisTemplate里面的数据,同样,RedisTemplate只能管理RedisTemplate中的数据;
  3. RedisTemplate中存取数据都是字节数组;StringRedisTemplate中存取数据都是字符串。

二、上手实战

2.1 导入依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.0</version>
</dependency>

需要手动引入 commos-pool2 的依赖,因为默认的连接池lettuce需要该依赖。

2.2 application.ymlredis参数配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
spring:
redis:
host: 47.98.178.84
port: 6379
database: 0
password: password
timeout: 60s # 连接超时时间,2.0 中该参数的类型为Duration,这里在配置的时候需要指明单位
# 连接池配置,2.0中直接使用jedis或者lettuce配置连接池(使用lettuce,依赖中必须包含commons-pool2包)
lettuce:
pool:
# 最大空闲连接数
max-idle: 500
# 最小空闲连接数
min-idle: 50
# 等待可用连接的最大时间,负数为不限制
max-wait: -1s
# 最大活跃连接数,负数为不限制
max-active: -1

2.3 Redis配置类-RedisConfig

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
@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableCaching
public class RedisConfig {

/**
* 采用RedisCacheManager作为缓存管理器
* @param factory
* @return
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
// 生成一个默认配置,通过config对象即可对缓存进行自定义配置
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
// 设置缓存的默认过期时间,也是使用Duration设置
config = config.entryTtl(Duration.ofMinutes(1))
.disableCachingNullValues(); // 不缓存空值

// 设置一个初始化的缓存空间set集合
Set<String> cacheNames = new HashSet<>();
cacheNames.add("my-redis-cache1");
cacheNames.add("my-redis-cache2");

// 对每个缓存空间应用不同的配置
Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
configMap.put("my-redis-cache1", config);
configMap.put("my-redis-cache2", config.entryTtl(Duration.ofSeconds(120)));
// 使用自定义的缓存配置初始化一个cacheManager
RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
// 注意这两句的调用顺序,一定要先调用该方法设置初始化的缓存名,再初始化相关的配置
.initialCacheNames(cacheNames)
.withInitialCacheConfigurations(configMap)
.build();
return cacheManager;
}
}

@ConditionalOnClass(RedisOperations.class)表示:该配置在 RedisOperations 存在的情况下才会生效(即项目中引入了 Spring Data Redis)

2.4 测试类

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
@SpringBootTest
@RunWith(SpringRunner.class)
public class StringCacheTest {

private static final Logger logger = LoggerFactory.getLogger(StringCacheTest.class);

@Resource
private StringRedisTemplate stringRedisTemplate;

@Resource
private RedisTemplate redisTemplate;

/**
* 测试 StringRedisTemplate
*/
@Test
public void stringRedisTemplateTest() {
stringRedisTemplate.opsForValue().set("name","redis测试");
String name = stringRedisTemplate.opsForValue().get("name");
logger.info(name);
stringRedisTemplate.delete("name");
name = stringRedisTemplate.opsForValue().get("name");
logger.info(name);
}
/**
* 测试 RedisTemplate
*/
@Test
public void redisTemplateTest() {
redisTemplate.opsForValue().set("name","redis测试");
String name = (String) redisTemplate.opsForValue().get("name");
logger.info(name);
redisTemplate.delete("name");
name = (String) redisTemplate.opsForValue().get("name");
logger.info(name);
}

}

三、总结

3.1 Redis 可视化客户端 rdm

通常情况下,我们可以在命令行下查看 Redis 数据库,但是可视化工具能更真实地让我们看到数据的结构。

这里分享我用的一个Mac版的客户端,打开链接,点击 Download 即可下载。

3.2 示例源码

Github 示例代码

Van wechat
最新文章,欢迎您扫一扫上面的微信公众号!
-------------    本文结束  感谢您的阅读    -------------