spring boot缓存我们不得不提到一个规范(JSR-107),其实就是Java提供得一种处理缓存得接口规范。
JSR-107规范定义了5个核心接口,分别为CachingProvider,CacheManager、Cache、Entry、Expiry
CachingProvider(缓存提供者):创建、配置、获取、管理和控制多个 CacheManager;
CacheManager(缓存管理器):创建、配置、获取、管理和控制多个唯一命名得Cache,
cache存在于cacheManager得上下文中,一个cacheManager只对应一个cachingProvider
Cache(缓存):由CacheManager管理的,CacheManager管理cache的生命周期,cache存在于cacheManager的上下文中,是一个类似map的数据结构,临时存储是以key为索引的值,一个cache只被一个CacheManager所拥有
Entry(缓存键值对):是一个存储在cache中的key-value对
Expiry(缓存时效):每一个存储在cache中的条目都是由一个定义的有效期,一旦超过这个时间,条目就会自动过期,过期以后条目不可以访问,更新,删除。缓存有效期可以通过expiryPolicy设置。
一个应用里面可以有多个缓存提供者
(CachingProvider)
,一个缓存提供者可以获取到多个缓存管
理器
(CacheManager)
,一个缓存管理器管理着不同的缓存
(Cache)
,缓存中是一个个的缓存键值
对
(Entry)
,每个
entry
都有一个有效期
(Expiry)
。缓存管理器和缓存之间的关系有点类似于数据库中
连接池和连接的关系。
在缓存得设置中还有另外几个缓存注解:
@Cacheable
标注在方法上,表示该方法的结果需要被缓存起来,缓存的键由
keyGenerator
的
策略决定,缓存的值的形式则由
serialize
序列化策略决定
(
序列化还是
json
格式
)
;标注上该注解之
后,在缓存时效内再次调用该方法时将不会调用方法本身而是直接从缓存获取结果
@CachePut
也标注在方法上,和
@Cacheable
相似也会将方法的返回值缓存起来,不同的是标
注
@CachePut
的方法每次都会被调用,而且每次都会将结果缓存起来,适用于对象的更新
@CacheEvict 清空缓存
@EnableCaching 开启基于注解的缓存