Spring Boot进阶:原理、实战与面试题分析
上QQ阅读APP看书,第一时间看更新

1.3.3 内置缓存

对于互联网应用而言,缓存可以说是一种基础技术组件。缓存的应用非常广泛,开发人员可以使用位于应用程序内部的本地缓存,也可以使用位于独立服务器上的分布式缓存。从3.1版本开始,Spring为开发人员提供了一个非常好用的缓存组件。在本书中,针对Spring内置缓存的讨论将分成两大部分,即针对通用场景的系统缓存,以及针对安全管理场景的认证缓存。

1. 内置缓存的实战内容

(1)系统缓存

Spring的缓存机制非常灵活,提供了一组包括@Cacheable、@CachePut和@CacheEvict在内的注解来简化系统缓存的使用过程,可以通过这些注解对容器中的任意Bean或者Bean的方法添加缓存功能。开发人员在使用系统缓存时,需要做的事情就是指定缓存键,并对缓存功能进行配置。

作为一款通用的技术组件,缓存的实现方式也有很多种,包括支持分布式场景的Redis和Hazelcast,以及支持应用程序本地缓存的EhCache、Guava、Caffeine等。Spring作为一款主流的开源框架,通过对缓存操作进行高度抽象,为开发人员提供一套统一的API。这种针对缓存的抽象机制值得我们深入学习。因此,本书中也会对Cache、CacheManager、CacheInterceptor等Spring缓存中的核心组件进行源码级别的剖析。

从实战角度讲,Spring缓存提供的统一编程API有时候并不能够满足我们的需求。所以,自定义缓存注解、自定义缓存键生成器,以及自定义Cache和CacheManager是日常开发过程中经常用到的开发技巧。

(2)认证缓存

Spring中的认证缓存可以认为是系统缓存在安全管理领域的一种具体的应用场景。想要使用认证缓存,我们首先需要对Spring家族中另一款具有代表性的安全框架Spring Security有一定的了解。Spring Security中内置了一套完整的认证和授权机制,开发人员可以通过引入认证缓存提高安全性处理的性能。

同样,认证缓存作为系统缓存的具体应用,与Spring Security框架中的用户认证过程紧密结合并完成全流程的缓存操作,也能为开发人员更好地应用Spring缓存机制提供参考。因此,我们也将对Spring Security框架中的UserDetails、Authentication、UserCache等核心对象展开原理分析。

和系统缓存一样,认证缓存的使用也比较简单,但通常需要开发人员基于自身业务实现自定义的扩展组件。从实战角度讲,如何实现定制化UserDetails以及对应的AuthenticationProvider是我们需要掌握的实战能力。

2. 内置缓存的实战案例

针对Spring内置的缓存组件,我们将分别针对系统缓存和认证缓存实现两个实战案例,即Spring缓存案例和Spring Security认证缓存案例。

在高并发场景下,缓存机制可以很好地解决系统性能瓶颈问题。Spring缓存内部集成了一批具有代表性的第三方缓存工具,我们将通过一个案例来分析如何使用Spring缓存应对高并发请求场景。

在安全性处理场景中,如果用户认证数据的获取和处理过程需要与数据库进行交互,那么这种交互过程很可能对系统性能带来负面影响。这时候,解决这个问题的一种有效方案是将用户身份验证缓存特定的时间长度。基于Spring提供的认证缓存,我们也将对该场景的处理过程给出案例。