springboot 版本3.1.2
1.缓存到redis和jackson序列化
@Configuration
@EnableCaching
public class CacheConfig implements CachingConfigurer {
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
// 配置序列化
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(om, Object.class);
// 配置缓存配置对象
RedisCacheConfiguration cacheConfig = RedisCacheConfiguration.defaultCacheConfig()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer));
return RedisCacheManager
.builder(redisConnectionFactory)
.cacheDefaults(cacheConfig)
.build();
}
}
2.对应方法执行缓存和失效
//缓存对应单参数情况
@Cacheable(value = CacheKey.DICT_ITEM_CACHE, key = "#parentCode")
//缓存多参数的情况
@Cacheable(value = CacheKey.DICT_ITEM_CACHE, key = "#parentCode.concat('-').concat(#code)")
//失效所有CacheKey.DICT_ITEM_CACHE对应的缓存
@CacheEvict(value = CacheKey.DICT_ITEM_CACHE, allEntries = true)
//注意:在应用内只要缓存key存在,被代理的方法就会返回缓存数据,所以对于相同key,但是返回类型不同的方法会造成,对象反序列化失败