在本博客中,我们将探讨如何使用Spring的缓存框架向任何Spring Boot应用程序添加基本缓存支持,如果没有正确实现,还将探讨缓存的一些问题。最后但并非最不重要的一点是,我们将看几个在真实场景中有用的缓存示例。
为什么要在应用程序中添加缓存
在深入探讨如何向应用程序添加缓存之前,首先想到的问题是为什么我们需要在应用程序中使用缓存。
假设有一个包含客户数据的应用程序,用户发出两个请求来获取客户的数据(id=100)。
这就是没有缓存时的情况。
如您所见,对于每个请求,应用程序都会转到数据库获取数据。从数据库获取数据是一项成本高昂的操作,因为它涉及IO。
但是,如果中间有一个缓存存储,可以在其中临时存储短时间的数据,则可以将这些往返保存到数据库并在IO时间保存。
这就是使用缓存时上述交互的样子。
在Spring Boot应用程序中实现缓存
SpringBoot提供了什么缓存支持?
- SpringBoot只提供了一个缓存抽象,您可以使用它将缓存透明、轻松地添加到Spring应用程序中。
- 它不提供实际的缓存存储。
- 但是,它可以与不同类型的缓存提供程序一起工作,如Ehcache、Hazelcast、Redis、Caffee等。
- SpringBoot的缓存抽象可以添加到方法中(使用注释)
- 基本上,在执行方法之前,Spring框架将检查方法数据是否已经缓存
- 如果是,则它将从缓存中获取数据。
- 否则它将执行该方法并缓存数据
- 它还提供了从缓存中更新或删除数据的抽象。
- 在我们当前的博客中,我们将了解如何使用Caffeine添加缓存,Caffeine是一种基于Java8的高性能、接近最优的缓存库。
您可以在 application.yaml
文件中指定使用哪个缓存提供程序来设置 spring.cache.type
属性。
但是,如果没有提供属性,Spring将根据添加的库自动检测缓存提供程序。
添加生成依赖项
现在假设您已经启动并运行了基本的Spring boot应用程序,让我们添加缓存依赖项。
打开 build.gradle
文件,并添加以下依赖项以启用Spring Boot的缓存
compile('org.springframework.boot:spring-boot-starter-cache')
接下来我们将添加对Caffeine的依赖
compile group: 'com.github.ben-manes.caffeine', name: 'caffeine', version: '2.8.5'
缓存配置
现在我们需要在Spring Boot应用程序中启用缓存。
为此,我们需要创建一个配置类并提供注释 @EnableCaching
。
@Configuration @EnableCaching public class CacheConfig { }
现在这个类是一个空类,但是我们可以向它添加更多配置(如果需要)。
现在我们已经启用了缓存,让我们提供缓存名称和缓存属性的配置,如缓存大小、缓存过期时间等
最简单的方法是在 ap