Springboot2.x对比SPringBoot1.x RedisCacheManagerde的变化关于 自定义Redis的cacheManager,保存Json格式到Redis

最近在学习在Springboot中用Redis做缓存,现在大部分使用SpringBoot2.x了,但大部分讲解视频都是在讲1.x中 RedisCacheManager 是如何配置的,关于在2.x中如何配置查阅了一些资料。
首先,在Springboot2.x中 RedisCacheManager 类的一些变化
在springboot2.x中,RedisCacheManager已经没有了单参数的构造方法,所以我们不能使用 RedisTemplate 作为参数构造 RedisCacheManager
在这里插入图片描述
在Springboot1.x中配置 RedisTemplate 和 RedisCacheManager 的模板为:

@Configuration
public class MyRedisConfig {

    @Bean
    public RedisTemplate<Object, Student> stuRedisTemplate(
            RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {
        RedisTemplate<Object, Student> template = new RedisTemplate<Object, Student>();
        template.setConnectionFactory(redisConnectionFactory);
        Jackson2JsonRedisSerializer<Student> ser = new Jackson2JsonRedisSerializer<Student>(Student.class);
        template.setDefaultSerializer(ser);
        return template;
    }
        //CacheManagerCustomizers可以来定制缓存的一些规则
    @Primary  //将某个缓存管理器作为默认的
    @Bean
    public RedisCacheManager studentCacheManager(RedisTemplate<Object, Student> stuRedisTemplate){
        RedisCacheManager cacheManager = new RedisCacheManager(stuRedisTemplate);
        //key多了一个前缀

        //使用前缀,默认会将CacheName作为key的前缀
        cacheManager.setUsePrefix(true);

        return cacheManager;
    }

在2.0中可以用容器自动装配的RedisCacheManager,我们定义(过期)规则,对对象进行序列化操作等都可以配置上去,绑定上去即可:
下面是2.0中配置的一个Demo,主要是配置RedisCacheManager,设置数据过期时限,存入json格式数据,便于我们观察。

//过期时间1天
    private Duration timeToLive = Duration.ofDays(1);
    
//redisTemplate模板提供给其他类对redis数据库进行操作
    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
        // 设置 CacheManger
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
 //redis缓存配置
                .entryTtl(this.timeToLive)
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer()))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer()))
                .disableCachingNullValues();
//根据redis缓存配置和reid连接工厂生成redis缓存管理器
        RedisCacheManager redisCacheManager = RedisCacheManager.builder(connectionFactory)
                .cacheDefaults(config)
                .transactionAware()
                .build();
        return redisCacheManager;
    }

    @Bean(name = "redisTemplate")
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.setKeySerializer(keySerializer());
        redisTemplate.setHashKeySerializer(keySerializer());
        redisTemplate.setValueSerializer(valueSerializer());
        redisTemplate.setHashValueSerializer(valueSerializer());
        return redisTemplate;
    }
  //redis键序列化使用StrngRedisSerializer
    private RedisSerializer<String> keySerializer() {
        return new StringRedisSerializer();
    }
  

  //redis值序列化使用json序列化器
    private RedisSerializer<Object> valueSerializer() {
        return new GenericJackson2JsonRedisSerializer();
    }

经过这样配置后,缓存在redis中的对象就变为Json格式的了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值