什么是Spring Cache?
Spring Cache 是Spring 提供的一整套的缓存解决方案,它不是具体的缓存实现,它只提供一整套的接口和代码规范、配置、注解等,用于整合各种缓存方案,比如Caffeine、Guava Cache、Ehcache
Spring Cache并不是缓存的实现,而是缓存使用的一种方式,其基于注解和Spring高级特性提供缓存读写以及失效刷新等各种能力
Spring Cache实现:
在 Spring 3.1 中引入了多 Cache 的支持,在 spring-context 包中定义了org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 两个接口来统一不同的缓存技术。
Cache 接口包含缓存的常用操作:增加、删除、读取等。CacheManager 是 Spring 各种缓存的抽象接口。
Spring 支持的常用 CacheManager 如下:
CaffeineCacheManager | 使用 Caffeine 作为缓存 |
CompositeCacheManager | 用于组合 CacheManager,可以从多个 CacheManager 中轮询得到相应的缓存 |
ConcurrentMapCacheManager |
默认,使用 java.util.ConcurrentHashMap 来实现缓存 private final ConcurrentMap<String, Cache> cacheMap = new ConcurrentHashMap<>(16); |
EhCacheCacheManager | |
JCacheCacheManager | |
NoOpCacheManager | 仅测试用,不会实际存储缓存 |
RedisCacheManager | 使用Redis作为缓存 |
SimpleCacheManager |
使用简单的 Collection 来缓存 private Collection<? extends Cache> caches = Collections.emptySet(); |
Spring Cache使用:
1、开启Spring Cache
启动类上添加注解 @EnableCaching
2、
@Cacheable:
触发缓存读取操作,用于查询方法上,如果缓存中找到则直接取出缓存并返回,否则执行目标方法并将结果缓存。
@CachePut:
@CachePut:
触发缓存更新的方法上,与 Cacheable 相比,该注解的方法始终都会被执行,并且使用方法返回的结果去更新缓存,适用于 insert 和 update 行为的方法上。
@CacheEvict:
@CacheEvict:
触发缓存失效,删除缓存项或者清空缓存,适用于 delete 方法上。
除此之外,抽象的 CacheManager 既能集成基于本地内存的单体应用,也能集成 EhCache、Redis 等缓存服务器
除此之外,抽象的 CacheManager 既能集成基于本地内存的单体应用,也能集成 EhCache、Redis 等缓存服务器
默认的缓存实现是ConcurrentMapCache
@CacheConfig
当我们需要缓存的地方越来越多,你可以使用@CacheConfig(cacheNames = {"cacheName"})注解在 class 之上来统一指定value的值,这时可省略value,如果你在你的方法依旧写上了value,那么依然以方法的value值为准
END.