一 点睛
Spring定义了CacheManager和Cache接口用来统一不同的缓存的技术。
CacheManager:Spring提供的各种缓存技术抽象接口。
Cache:包含缓存的各种操作(增加、删除、获得缓存)。
二 Spring支持的CacheManager
针对不同的缓存技术,需要实现不同的CacheManager,Spring定义的CacheManager实现如下:
-
SimpleCacheManager:使用简单的Collection来存储缓存,主要用来测试用途
-
ConcurrentMapCache:使用ConcurrentMap来存储缓存
-
NoOpCacheManager:仅测试用途,不会实际存储缓存
-
EhCacheCacheManager:使用EhCache作为缓存技术
-
GuavaCacheManager:使用Google Guava的GuavaCache作为缓存技术
-
HazelcastCacheManger:使用Hazelcast作为缓存技术
-
JCacheCacheManager:支持JCache(JSR-107)标准的实现作为缓存技术,如Apache Commons JCS
-
RedisCacheManager:使用Redis作为缓存技术
在我们使用任意一个实现的CacheManager的时候,需注册实现的CacheManager的Bean,例如
@Bean
public EhCacheCacheManager cacheManager(CacheManager ehCacheCacheManager){
return new EhCacheCacheManager(ehCacheCacheManager);
}
当然,每种缓存技术都有很多的额外配置,但配置CacheManager是必不可少的。
三 声明式缓存注解
Spring提供了4个注解来声明缓存规则。这4个注解的说明如下:
-
@Cacheable:在方法执行前Spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法的的返回值放进缓存。
-
@CachePut:无论怎样,都会将方法的返回值放到缓存中。@CachePut的属性与@Cacheable保持一致。
-
@CaheEvict:将一条或多条数据从缓存中删除。
-
@Caching:可以通过@Caching注解组合多个注解策略在一个方法上。
@Cacheable、@CachePut、@CaheEvict都有value属性,指定的是要使用缓存名称;key属性指定的是数据在缓存中的存储的键。
四 开启声明式缓存支持
开启声明式缓存支持方法:只需在配置类上使用@EnableCaching即可,伪代码如下:
@Configuration
@EnableCaching
public class AppConfig{
}