自定义RedisCacheManager

10次阅读

共计 1455 个字符,预计需要花费 4 分钟才能阅读完成。

在项目的 Redis 配置类 RedisConfig 中,按照上一步分析的定制方法自定义名为 cacheManager 的 Bean 组件

“`java

@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 测试时,实体类可以不用实现序列化接口)

这些内容,是从拉勾教育的《Java 工程师高薪训练营》里学到的,课程内容非常全面,还有拉勾的内推大厂服务,推荐你也看看。

正文完
 0