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());}