spring定义了本身缓存抽象用于统一缓存的操做,只要实现这套接口,就能够接入spring经过注解的方式使用缓存(一些主流的缓存都提供该抽象的实现)redis
缓存抽象主要定义了如下两个接口spring
Cache 缓存
缓存接口,定义缓存操做spa
CacheManager代理
缓存管理器,管理缓存组件对象
注解的方式使用缓存:spring提供了一种经过注解标记方法从而对方法的返回结果进行缓存的方式使用缓存接口
@Cacheableget
标记方法,对方法返回结果进行缓存,能够指定key值,缓存条件。it
@CacheEvictio
清空缓存
@CachePut
用于更新缓存,通常用于更新或者新增方法,将最数据存刷到缓存中。
@EnabheCaching
开启基于注解的缓存,标记主方法
大体原理:代理;对标记了上述注解的方法的对象进行代理,从而根据各类注解添加相应的缓存功能。
自动配置原理:
1.添加选择器,经过CacheAutoConfiguration添加缓存配置类容器中,spring boot 默认提供了如下10个缓存配置类,每一个配置类都会被执行,知足条件的配置类会匹配成功,添加到容器中,缓存配置类主要为容器添加各自的CacheManager组件,用于建立缓存组件,完成spring 封装的缓存操做。
org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration
org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration
org.springframework.boot.autoconfigure.cache.EhCacheCacheConfiguration
org.springframework.boot.autoconfigure.cache.HazelcastCacheConfiguration
org.springframework.boot.autoconfigure.cache.InfinispanCacheConfiguration
org.springframework.boot.autoconfigure.cache.CouchbaseCacheConfiguration
org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration
org.springframework.boot.autoconfigure.cache.CaffeineCacheConfiguration
org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration
org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration
2.缓存自动配置,XxxAutoConfiguration,添加缓存功能组件到容器中,
缓存提供的灵活性(扩展功能)
keyGenarator
缓存数据时,key的生成策略
serialize
缓存数据时value序列化策略,添加序列化器到自定义配置类中,并添加自定义配置类替换默认配置类(RedisCacheConfiguration)。
@Beanpublic RedisCacheConfiguration redisCacheConfiguration(){ Jackson2JsonRedisSerializer<UserVo> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<UserVo>(UserVo.class); return RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(RedisSerializationContext.fromSerializer(jackson2JsonRedisSerializer).getValueSerializationPair());}