1.缓存目的
缓存是用于提升系统的性能,加速系统的访问,降低成本的一种技术。可以将一些高频、热点信息放入缓存中,避免直接从数据库中查询,如商品的页面信息这种经常被访问的数据。
2.JSR-107 缓存规范
为了统一缓存的开发规范、提高系统的扩展性和最小化开发成本等,J2EE 发布了 JSR-107 缓存规范。
Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry和 Expiry。
CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期访问多个CachingProvider。
CacheManager定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中。一个CacheManager仅被一个CachingProvider所拥有。
Cache是一个类似Map的数据结构并临时存储以Key为索引的值。一个Cache仅被一个CacheManager所拥有。
Entry是一个存储在Cache中的key-value对。
Expiry 每一个存储在Cache中的条目有一个定义的有效期。一旦超过这个时间,条目为过期的状态。一旦过期,条目将不可访问、更新和删除。缓存有效期可以通过ExpiryPolicy设置。
3.Spring 缓存抽象
Spring从3.1开始定义了org.springframework.cache.Cache和 CacheManager 接口来统一不同的缓存技术并支持使用 JCache(JSR-107)注解简化我们开发。
Cache:缓存接口,定义缓存操作。实现有:RedisCache、EhCacheCache、ConcurrentMapCache等.
CacheManager:缓存管理器,管理各种缓存(Cache)组件
核心注解:
注解 说明
@Cacheable 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
@CacheEvict 主要针对方法配置,清空缓存
@CachePut 保证方法被调用,又希望结果被缓存。
@EnableCaching 在启动类上面加注解@EnableCaching,开启缓存
keyGenerator 缓存数据时key生成策略
serialize 缓存数据时value序列化策略
注解参数:
属性名 说明 举例
cacheNames/value 缓存的名称,在spring配置文件中定义,必须指定至少一个 @Cacheable(value=”mycache”)
@Cahceable(value{“cache1”