搞了一天算是搞出来点东西了。
网上springboot整合redis的教程大部分都是基于springboot 1.x的,然后配置的CacheManager如下
@Bean
public CacheManager cacheManager(RedisTemplate<Object, Object> redisTemplate) {
RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);
return redisCacheManager;
}
大致如上,然后今天做的时候发现CacheManager根本就没有这个构造了,想了想可能是版本原因,网上搜了下springboot2整合redis发现果然是版本原因哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈哈哈哈哈哈休息一下哈哈哈哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈哈哈哈哈哈哈哈啊哈哈哈。
然后从大神那知道好像springboot 1.x连接redis服务器用的是jedis,springboot 2.x用的是Lettuce,那么差异就来了。
所以这里记录一下springboot 2.x中的CacheManager怎么写(代码参考大佬的)
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); // 生成一个默认配置,通过config对象即可对缓存进行自定义配置
config = config.entryTtl(Duration.ofSeconds(60)) // 设置缓存的默认过期时间,也是使用Duration设置
.disableCachingNullValues(); // 不缓存空值
// 设置一个初始化的缓存空间set集合
Set<String> cacheNames = new HashSet<>();
cacheNames.add("my-redis-cache1");
cacheNames.add("my-redis-cache2");
// 对每个缓存空间应用不同的配置
Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
configMap.put("my-redis-cache1", config);
configMap.put("my-redis-cache2", config.entryTtl(Duration.ofSeconds(10)));
RedisCacheManager cacheManager = RedisCacheManager.builder(factory) // 使用自定义的缓存配置初始化一个cacheManager
.initialCacheNames(cacheNames) // 注意这两句的调用顺序,一定要先调用该方法设置初始化的缓存名,再初始化相关的配置
.withInitialCacheConfigurations(configMap).build();
return cacheManager;
}
}
注释也很清楚了,这样一搞完就可以直接使用注解使用redis缓存了,很方便。但是,反正我感觉,这样配置没有spingboot1中简便,也可能是我涉世未深吧。加 油