springboot加上cache之后再整合redis 之后 cache的默认缓存都会存到redis数据库中(会只有redis起作用)
原理: CacheManager === cache 缓存组件来实际给缓存中存取数据
1.引入redis的starter,容器中保存的是REdisCacheManager
2.RedisCacheManager帮我们创建RedisCache作为缓存组件,Rediscache通过操作redis缓存数据库.
3.默认保存数据k-v都是Object 利用序列化保存, 如何保存为json?
a.引入了redis的starter,cachemanager变为RedisCachemanager;
b.默认创建的RedisCacheManager操作redis的时候使用的是RedisTemplate<Object,Object>
c.RedisTemplate<Object,Object>是默认使用jdk的序列化机制
4.自定义CacheManager (注意 这儿springboot1.0x 和springboot2.0x较大差别 这里介绍springboot2.0x)
***在redis的配置类里加上这个东西***
这样的话存到redis数据库里面的数据就不是序列化成Unicode格式的
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//解决查询缓存转换异常的问题