了解 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进行特殊处理。