自定义 RedisCacheManager
在项目的 Redis 配置类 RedisConfig 中,按照上一步分析的定制方法自定义名为 cacheManager 的 Bean 组件
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
// 分别创建 String 和 JSON 格式序列化对象,对缓存数据 key 和 value 进行转换
RedisSerializer<String> strSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jacksonSeial =
new Jackson2JsonRedisSerializer(Object.class);
// 解决查询缓存转换异常的问题
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jacksonSeial.setObjectMapper(om);
// 定制缓存数据序列化方式及时效
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofDays(1))
.serializeKeysWith(RedisSerializationContext.SerializationPair
.fromSerializer(strSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(jacksonSeial))
.disableCachingNullValues();
RedisCacheManager cacheManager = RedisCacheManager
.builder(redisConnectionFactory).cacheDefaults(config).build();
return cacheManager;
}
上述代码中,在 RedisConfig 配置类中使用 @Bean 注解注入了一个默认名称为方法名的 cacheManager 组件。在定义的 Bean 组件中,通过 RedisCacheConfiguration 对缓存数据的 key 和 value 分别进行了序列化方式的定制,其中缓存数据的 key 定制为 StringRedisSerializer(即 String 格式),而 value 定制为了 Jackson2JsonRedisSerializer(即 JSON 格式),同时还使用 entryTtl(Duration.ofDays(1)) 方法将缓存数据有效期设置为 1 天
完成基于注解的 Redis 缓存管理器 RedisCacheManager 定制后,可以对该缓存管理器的效果进行测试(使用自定义序列化机制的 RedisCacheManager 测试时,实体类可以不用实现序列化接口)
学习让人快乐,学习更让人觉得无知!学了 1 个多月的《Java 工程师高薪训练营》,才发现自己对每个技术点的认知都很肤浅,根本深不下去,立个 Flag:每天坚持学习一小时,一周回答网上 3 个技术问题,把自己知道都分享出来。