springboot -- 2.0版本自定义ReidsCacheManager的改变

1. 问题发现

在1.0版本中,咱们配置redis的cacheManager是这种方式:redis

//缓存管理器
    @Bean
    public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        //设置缓存过时时间
        cacheManager.setDefaultExpiration(10000);
        return cacheManager;
    }    //缓存管理器
复制代码

然而在2.0版本中,这个代码直接报错,缘由是RedisCacheManager取消了1.0版本中的public RedisCacheManager(RedisOperations redisOperations)的这个构造方法,因此咱们没法再用RedisTemplate做为参数来自定义CacheManagerspring

下面看一看两个版本的差异:json

1.0 版本的CacheManager构造器

2.0 版本的CacheManager构造器

RedisCacheWriter提供了对Redis的set、setnx、get等命令的访问权限,能够由多个缓存实现共享,并负责写/读来自Redis的二进制数据。缓存

RedisCacheConfiguration根据名字都能想到它是提供redis的配置。springboot

2. springboot2.0 中 CacheManager自定义配置

/**
     * 缓存管理器
     */
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        //初始化一个RedisCacheWriter
        RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
        //设置CacheManager的值序列化方式为json序列化
        RedisSerializer<Object> jsonSerializer = new GenericJackson2JsonRedisSerializer();
        RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair
                                                    .fromSerializer(jsonSerializer);
        RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig()
                                                    .serializeValuesWith(pair);
        //设置默认超过时时间是30秒
        defaultCacheConfig.entryTtl(Duration.ofSeconds(30));
        //初始化RedisCacheManager
        return new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
    }
复制代码

上面的代码中,还设置了CacheManager的值序列化方式,因此有了这个配置,能够直接在注解的形式中实现json的redis存储而不用再去多写配置。bash

相关文章
相关标签/搜索