1、SpringBoot1.0中
//自定义缓存文本
@Bean
public RedisTemplate<Object, Employee> empredisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Employee> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer<Employee> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Employee.class);
template.setDefaultSerializer(jackson2JsonRedisSerializer);
return template;
}
//自定义CacheManager
@Bean
public RedisCacheManager empCacheManager(RedisTemplate<Object,Employee> empRedisTemplate){
RedisCacheManager cacheManager = new RedisCacheManager(empRedisTemplate);
cacheManager.setUsePrefix(true);
return cacheManager;
}
2、SpringBoot2.0中
@Bean
public RedisCacheManager employeeCacheManager(RedisConnectionFactory redisConnectionFactory){
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
//解决查询缓存转换异常的问题
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
jackson2JsonRedisSerializer.setObjectMapper(om);
// 配置序列化(解决乱码的问题)
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
.disableCachingNullValues();
return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config).build();
}
3、直接操作缓存—使用缓存管理器得到缓存,进行api调用
//指定某个缓存管理器
@Qualifier("myCacheManager")
@Autowired
RedisCacheManager myCacheManager;
public Department getDeptById(Integer id){
System.out.println("查询部门" + id);
Department department = departmentMapper.getDeptById(id);
//获取某个缓存
Cache dept = myCacheManager.getCache("dept");
dept.put("1",department);
return department;
}
区别:
通过代码可以看到主要区别就是RedisCacheManager的创建流程,其中SpringBoot1.0中的解决方案是对于单一的对象缓存的解决,而SpringBoot2.0中对于对象的解决是基于全局的解决方案,这也算是一个比较大的改进。