SpringBoot学习之路---缓存小介绍(JSR107与Spring缓存抽象)

今天要介绍的东西和缓存有关。


缓存有多有用?

这里有一个场景:我们在进行一些数据访问时,每次都要去查询数据库,如果数据基本不变,那每次去查询数据库开销必然很大,会导致效率的流失。在这种情况下,我们引入缓存中间件,每次程序需要去查询数据时,先进行判断,如果在中间件里有数据了就直接取出来,如果没有数据再去数据库访问并将数据暂时存储在中间件中。这样做有一个好处就是大大减少了访问数据库的次数,从而增加了我们程序的执行效率。

java为我们提供一个缓存规范(JSP-107),这个JSR-107就像是jdbc一样,只不过一个是数据库的规范,一个是缓存中间件的规范。

有了这个规范之后,我们操作缓存只需要去找符合规范的实现类直接使用即可。

Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, EntryExpiry

  • CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期访问多个CachingProvider
  • CacheManager定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中。一个CacheManager仅被一个CachingProvider所拥有。
  • Cache是一个类似Map的数据结构并临时存储以Key为索引的值。一个Cache仅被一个CacheManager所拥有。
  • Entry是一个存储在Cache中的key-value对。
  • Expiry 每一个存储在Cache中的条目有一个定义的有效期。一旦超过这个时间,条目为过期的状态。一旦过期,条目将不可访问、更新和删除。缓存有效期可以通过ExpiryPolicy设置。

可以看出其内部结构,就是一个标准的"树型结构",一层操作一层:

SpringBoot学习之路---缓存小介绍(JSR107与Spring缓存抽象)_第1张图片
但是JSR107实现起来太过复杂,并且市面上能看到的缓存有些并不支持这个规范,在这种基础上,Spring为我们提供一个它的抽象,我们称为Spring缓存抽象就好了。

Spring缓存抽象与JSR107的区别就在于Spring从3.1开始定义了org.springframework.cache.Cache
和org.springframework.cache.CacheManager接口来统一不同的缓存技术;
并支持使用JCache(JSR-107)注解简化我们开发

它只有Cache与CacheManager两个接口,并且还可以使用一些注解来简化咱们开发!!

SpringBoot学习之路---缓存小介绍(JSR107与Spring缓存抽象)_第2张图片

其中省去了cacheprovide等等别的规范接口,我们来看看它为我们提供的注解:

SpringBoot学习之路---缓存小介绍(JSR107与Spring缓存抽象)_第3张图片

只需把这些注解按需加在方法上即可,关于具体使用,下一篇博客中会介绍到.

你可能感兴趣的:(SpringBoot)