SpringBoot学习之路---缓存小介绍(JSR107与Spring缓存抽象)
今天要介绍的东西和缓存有关。
缓存有多有用?
这里有一个场景:我们在进行一些数据访问时,每次都要去查询数据库,如果数据基本不变,那每次去查询数据库开销必然很大,会导致效率的流失。在这种情况下,我们引入缓存中间件,每次程序需要去查询数据时,先进行判断,如果在中间件里有数据了就直接取出来,如果没有数据再去数据库访问并将数据暂时存储在中间件中。这样做有一个好处就是大大减少了访问数据库的次数,从而增加了我们程序的执行效率。
java为我们提供一个缓存规范(JSP-107),这个JSR-107就像是jdbc一样,只不过一个是数据库的规范,一个是缓存中间件的规范。
有了这个规范之后,我们操作缓存只需要去找符合规范的实现类直接使用即可。
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设置。
可以看出其内部结构,就是一个标准的"树型结构",一层操作一层:
但是JSR107实现起来太过复杂,并且市面上能看到的缓存有些并不支持这个规范,在这种基础上,Spring
为我们提供一个它的抽象,我们称为Spring缓存抽象就好了。
Spring缓存抽象与JSR107的区别就在于Spring从3.1开始定义了org.springframework.cache.Cache
和org.springframework.cache.CacheManager接口来统一不同的缓存技术;
并支持使用JCache(JSR-107)注解简化我们开发
它只有Cache与CacheManager两个接口,并且还可以使用一些注解来简化咱们开发!!
其中省去了cacheprovide
等等别的规范接口,我们来看看它为我们提供的注解:
只需把这些注解按需加在方法上即可,关于具体使用,下一篇博客中会介绍到.