SpringBoot整合redis作为缓存

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
/**
* 8.整合 SpringCache简化缓存开发
* 1.引入依赖
* spring-boot-starter-cache
* spring-boot-starter-data-redis
* 2.写配置
* 1. 自动配置了哪些
* CacheAuthConfiguration 会导入 RedisCacheConfiguration;
* 自动配好了缓存管理器RedisCacheManager
* 2. 配置使用redis作为缓存
* spring.cache.type=redis
* 3. 测试使用缓存
* @Cacheable Triggers Cache population触发将数据保存到缓存的操作
* @CacheEvict 将数据从缓存删除的操作
* @CachePut 不影响方法执行更新操作
* @Caching 组合以上多个操作
* @CacheConfig 在类级别共享缓存的相
* 1.开启缓存功能 @EnableCaching
* 2.只需要使用注解就能完成缓存操作
* 4. 原理
* CacheAutoConfiguration => RedisCacheConfiguration
* 自动配置了 RedisCacheManager -> 初始化所有的缓存 -> 每个缓存决定使用什么配置
* 如果redisCacheConfiguration 有就用已有的,没有就用默认配置
* ->想改缓存的配置,只需要给容器中放一个RedisCacheConfiguration即可
* ->就会应用到当前RedisCacheManager管理的所有缓存分区中
*/

配置文件类

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
@EnableConfigurationProperties(CacheProperties.class)
@EnableCaching
@Configuration
public class MyCacheConfig {
/**
* 将配置作为参数传入,从容器中自动获取
*
* @return
*/
@Bean
RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
// 设置键的序列化方式
config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
// 设置值的序列化方式,将类名也序列化
config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
// 将配置文件中的配置生效

// 获取redis的配置
CacheProperties.Redis redisProperties = cacheProperties.getRedis();
// 设置过期时间
if (redisProperties.getTimeToLive() != null) {
System.out.println(redisProperties.getTimeToLive());
config = config.entryTtl(redisProperties.getTimeToLive());
}
// 设置key前缀
if (redisProperties.getKeyPrefix() != null) {
config = config.prefixCacheNameWith(redisProperties.getKeyPrefix());
}

// if (!redisProperties.isCacheNullValues()) {
// config = config.disableCachingNullValues();
// }
//
// if (!redisProperties.isUseKeyPrefix()) {
// config = config.disableKeyPrefix();
// }
return config;
}
}