搭建步骤
1.Redis 注解默认序列化机制
a.
Spring Boot
整合
Redis
组件提供的缓存自动配置类
RedisCacheConfiguration
,
其
内部
是
通过
Redis
连接工厂
RedisConnectionFactory
定义了一个缓存管理器
RedisCacheManager
;同时定制
RedisCacheManager
时,也默认使用了
JdkSerializationRedisSerializer
序列化方式。
b.
如果想要使用自定义序列化方式的
RedisCacheManager
进行数据缓存操作,可以创建一个名为
cacheManager
的
Bean
组件
,并在该组件中设置对应的
序列化
方式即可。
2.自定义RedisCacheManager
在RedisConfig类中添加方法cacheManager,该方法主要由三部分组成,如下:
@Configuration //定义这是一个配置类
public class RedisConfig {
@Bean
public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//使用json序列化对象,对缓存数据key和value进行转化
Jackson2JsonRedisSerializer<Object> jsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
//解决查询缓存转换异常问题
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); //设置属性可见性
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); //启用默认类型信息
jsonRedisSerializer.setObjectMapper(om);
//设置redistemplate模板API的序列化方式为json
redisTemplate.setDefaultSerializer(jsonRedisSerializer);
return redisTemplate;
}
@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;
}
}
3.效果测试
现在Comment实体类不需要实现序列化接口:
删除后进行测试: