乐趣区

自定义RedisCacheManager

自定义 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 个技术问题,把自己知道都分享出来。

退出移动版