在1.0版本中,咱們配置redis的cacheManager是這種方式:java
//緩存管理器 @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
。redis
下面看一看兩個版本的差異:spring
RedisCacheWriter
提供了對Redis的set、setnx、get等命令的訪問權限,能夠由多個緩存實現共享,並負責寫/讀來自Redis的二進制數據。json
RedisCacheConfiguration
根據名字都能想到它是提供redis的配置。緩存
/** * 緩存管理器 */ @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存儲而不用再去多寫配置。springboot