spring 的缓存抽象
spring定义了自己缓存抽象用于统一缓存的操作,只要实现这套接口,就可以接入spring通过注解的方式使用缓存(一些主流的缓存都提供该抽象的实现)
缓存抽象主要定义了以下两个接口
Cache
缓存接口,定义缓存操作
CacheManager
缓存管理器,管理缓存组件
注解的方式使用缓存:spring提供了一种通过注解标记方法从而对方法的返回结果进行缓存的方式使用缓存
@Cacheable
标记方法,对方法返回结果进行缓存,可以指定key值,缓存条件。
@CacheEvict
清空缓存
@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)。
@Bean
public RedisCacheConfiguration redisCacheConfiguration(){
Jackson2JsonRedisSerializer<UserVo> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<UserVo>(UserVo.class);
return RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(RedisSerializationContext.fromSerializer(jackson2JsonRedisSerializer).getValueSerializationPair());
}