了解 SpringCache之前,我们了解下Cache之前,我们先明确下Cache是什么?

Cache 就是我们常说是缓存 ,缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快。

为什么使用缓存呢?

当我们需要重复的获取相同的数据时,一次又一次的请求数据库获取远程服务,会导致大量的时间浪费在数据库查询或者远程方法调用上,导致程序性能降低,这便是数据缓存要解决的问题。

SpringCache是什么?

SpringCache是一个实现了基于注解的缓存功能的框架。它利用了AOP的技术,数据只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。

注解:使用了AOP的Bean,会生成一个代理对象,实际调用的时候,会执行这个代理对象的一系列的Interceptor。SpringCache使用的是一个叫做CacheInterceptor的拦截器。我们如果加了缓存相应的注解,就会走到这个拦截器上

SpringCache框架只是提供了一层抽象,底层可以使用不同的cache实现,具体就是通过 CacheManager 接口来统一不同的缓存技术。CacheManager是Spring提供的各种缓存技术抽象接口。

我们常用 RedisCacheManager也就是CacheManager的一个实现类, 它是使用Redis作为缓存技术,也就是SpringCache框架对Redis的集成.

在spring boot项目中如何使用缓存技术?

Spring提供4个注解来声明缓存规则(注解式的AOP方式实现

注解

说明

@EnableCaching

开启缓存注解功能

@Cacheable

在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中

@CachePut

将方法的返回值放到缓存中

@CacheEvict

将一条或多条数据从缓存中删除

在spring boot项目中,使用缓存技术只需在项目中导入相关缓存技术的依赖包,并在启动类上使用@EnableCaching开启缓存支持即可。例如,使用Redis作为缓存技术,只需要导入Spring data Redis的maven坐标即可。

具体的实现思路如下:

1). 导入Spring Cache和Redis相关maven坐标
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency><dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>2). 在application.yml中配置缓存数据的过期时间和redis的服务器
spring:
  redis:
    host: 192.168.138.100
    port: 6379
    password: 123456
    database: 0
  cache:
    redis:
      time-to-live: 1800000   #设置缓存过期时间,可选

3). 在启动类上加入@EnableCaching注解,开启缓存注解功能

4). 在查询方法上加入@Cacheable注解

5). 分别在增、删、改方法上加入CacheEvict注解

注解式缓存声明式通过AOP的方式进行缓存处理的,这样更方便缓存管理,从而也减少了大量重复代码。

但是对于某些复杂的业务场景还是建议使用RedisTemplate进行特殊处理。