springboot2.x 的 RedisCacheManager變化
springboot2.x 的 RedisCacheManager變化
由於最近在學着使用redis做緩存,使用的是springboot2.x來搭建的項目。
看了看網上的一些教程,但是大多數教程都是基於1.x的版本來講解的,但是springboot2.x之后發生了一些變動,網上想找一些資料不太容易。
springboot配置緩存過期時間,網上大部分資料是使用ReidsCacheManager來進行自定義的配置
以下是大部分網上的代碼(這也是基於springboot1.x的版本可以使用的)
@Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager cacheManager= new RedisCacheManager(redisTemplate); cacheManager.setDefaultExpiration(60); Map<String,Long> expiresMap=new HashMap<>(); expiresMap.put("Product",5L); cacheManager.setExpires(expiresMap); return cacheManager; }
然而在springboot2.x中,RedisCacheManager已經沒有了單參數的構造方法
以下是springboot2.x版本下 RedisCacheManager的大部分方法
可以發現原來1.x版本的構造方法已經沒有了,新的構造方法如圖所示。
本人沒有看1.x的源碼,我發現這里有一個RedisCacheManagerBuilder的內部類,從名字就不難發現這是一個用來構造RedisCacheManager的建造模式的應用吧。
所以以下是本人使用的RedisCacheManager的構造方法(如果定制化要求的話可以修改其中的配置就可以),這里我只設置了緩存失效時間為一小時,如需其他配置可以到RedisCacheConfiguration這個類中去尋找一下。
@Bean public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofHours(1)); // 設置緩存有效期一小時 return RedisCacheManager .builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory)) .cacheDefaults(redisCacheConfiguration).build(); }
之前的代碼是這樣的
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
RedisCachePrefix cachePrefix = new RedisCachePrefix() {
@Override
public byte[] prefix(String s) {
return new StringRedisSerializer().serialize("XXX:".concat(s));
}
};
cacheManager.setUsePrefix(true);
cacheManager.setCachePrefix(cachePrefix);
cacheManager.setDefaultExpiration(30 * 60);
return cacheManager;
}