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


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構造器
 
 
2.0 版本的CacheManager構造器
 
 

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



作者:FantJ
鏈接:https://www.jianshu.com/p/20366ecf12ce
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM