配置示例
@Configuration
public class RedisConfig {
//基于注解的序列化设置
@Bean
public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory, CacheProperties cacheProperties) {
//序列化方式,分别为String格式和Json格式
RedisSerializer<String> stringRedisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//json与对象转换的核心类
ObjectMapper om = new ObjectMapper();
//解决查询缓存转换异常问题
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
//设置转换核心类
jackson2JsonRedisSerializer.setObjectMapper(om);
//用于读取配置文件,内部使用@ConfigurationProperties(prefix = "spring.cache")注解
CacheProperties.Redis redisProperties = cacheProperties.getRedis();
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
// 指定key缓存序列化方式为String
config=config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(stringRedisSerializer));
// 指定value缓存序列化方式为json
config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer));
// 设置配置文件中的各项配置,如过期时间,选择性配置
config = config.entryTtl(Duration.ofDays(1));
config = config.prefixKeysWith(redisProperties.getKeyPrefix());
config = config.disableCachingNullValues();
config = config.disableKeyPrefix();
RedisCacheManager redisCacheManager=RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config).build();
return redisCacheManager;
}
//基于api的序列化设置
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
//序列化方式,分别为String格式和Json格式
RedisSerializer<String> stringRedisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//json与对象转换的核心类
ObjectMapper om = new ObjectMapper();
//解决查询缓存转换异常问题
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
//设置转换核心类
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setConnectionFactory(factory);
//设置默认序列化方式,下面单独设置会覆盖默认
template.setDefaultSerializer(jackson2JsonRedisSerializer);
//key序列化方式为string格式
template.setKeySerializer(stringRedisSerializer);
//value序列化为Json格式
template.setValueSerializer(jackson2JsonRedisSerializer);
//value hashmap序列化为Json格式
template.setHashKeySerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
return template;
}
}
ObjectMapper
用于JSON与对象间转换
Java使用ObjectMapper的简单示例 - Fire♪一度 - 博客园 (cnblogs.com)
四种序列化方式
Redis - RedisTemplate及4种序列化方式深入解读 - 云+社区 - 腾讯云 (tencent.com)