自定义RedisCacheManager

搭建步骤

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实体类不需要实现序列化接口:

删除后进行测试:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值