目录
EhCache 是⼀个⽐较成熟的 Java 缓存框架,最早从 hibernate 发展⽽来, 是进程中的缓存系统,它提供了⽤内存,磁盘⽂件存储,以及分布式存储⽅式等多种灵活的 cache 管理⽅案,快速简单。
Spring Boot 对 Ehcache 的使⽤提供⽀持,所以在 Spring Boot 中只需简单配置即可使⽤ Ehcache 实现数据缓存处理。
1 Spring Cache 相关注解说明
SpringBoot 缓存实现内部使⽤ SpringCache 实现缓存控制,这⾥集成 Ehcache 实际上是对 SpringCache 抽象的其中⼀种实现,这⾥在使⽤ Ehcache 实现缓存控制时相关注解说明如下。
1.1 @CacheConfig
⽤于标注在类上,可以存放该类中所有缓存的公有属性,⽐如设置缓存的名字。
@CacheConfig(cacheNames = "users")
public interface UserService {。。。}
配置了该数据访问对象中返回的内容将存储于名为users的缓存对象中,我们也可以不使⽤该注解, 直接通过@Cacheable⾃⼰配置缓存集的名字来定义。
1.2 @Cacheable
应⽤到读取数据的⽅法上,即可缓存的⽅法,如查找⽅法,先从缓存中读取,如果没有再调⽤相应⽅ 法获取数据,然后把数据添加到缓存中。
该注解主要有下⾯⼏个参数:
value、cacheNames:两个等同的参数( cacheNames 为 Spring 4 新增,作为 value 的别 名),⽤于指定缓存存储的集合名。由于 Spring 4 中新增了 @CacheConfig,因此在 Spring 3 中 原本必须有的 value 属性,也成为⾮必需项了。
key:缓存对象存储在Map集合中的 key 值,⾮必需,缺省按照函数的所有参数组合作为 key 值, 若⾃⼰配置需使⽤ SpEL 表达式,⽐如:@Cacheable(key = "#p0"):使⽤函数第⼀个参数作为缓 存的 key 值,更多关于SpEL 表达式的详细内容可参考官⽅⽂档。
condition:缓存对象的条件,⾮必需,也需使⽤SpEL表达式,只有满⾜表达式条件的内容才会被 缓存,⽐如:@Cacheable(key = "#p0", condition = "#p0.length() < 3"),表示只有当第⼀个参数 的⻓度⼩于3的时候才会被缓存。
unless:另外⼀个缓存条件参数,⾮必需,需使⽤ SpEL 表达式。它不同于 condition 参数的地⽅ 在于它的判断时机,该条件是在函数被调⽤之后才做判断的,所以它可以通过对 result 进⾏判 断。
keyGenerator:⽤于指定 key ⽣成器,⾮必需。若需要指定⼀个⾃定义的 key ⽣成器,我们需要 去实现org.springframework.cache.interceptor.KeyGenerator 接⼝,并使⽤该参数来指定。需 要注意的是:该参数与 key 是互斥的。
cacheManager:⽤于指定使⽤哪个缓存管理器,⾮必需。只有当有多个时才需要使⽤ cacheResolver:⽤于指定使⽤那个缓存解析器,⾮必需。需通过 org.springframework.cache. interceptor.CacheResolver 接⼝来实现⾃⼰的缓存解析器,并⽤该 参数指定。
@Cacheable(value = "user", key = "#id")
User selectUserById(final Integer id);
1.3 @CachePut
应⽤到写数据的⽅法上,如新增/修改⽅法,调⽤⽅法时会⾃动把相应的数据放⼊缓存,@C