springboot -- 2.0版本自定義ReidsCacheManager的改變

微笑面對生活發表於2018-09-06

1. 問題發現

在1.0版本中,我們配置redis的cacheManager是這種方式:

    //快取管理器
    @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作為引數來自定義CacheManager

下面看一看兩個版本的差別:

1.0 版本的CacheManager構造器

springboot -- 2.0版本自定義ReidsCacheManager的改變

2.0 版本的CacheManager構造器

springboot -- 2.0版本自定義ReidsCacheManager的改變

RedisCacheWriter提供了對Redis的set、setnx、get等命令的訪問許可權,可以由多個快取實現共享,並負責寫/讀來自Redis的二進位制資料。

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

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儲存而不用再去多寫配置。

相關文章