一、Spring Cache简介
Spring Cache是一个框架,实现了基于注解的缓存功能,;只需要简单地加一个注解,就能实现缓存功能。
Spring Cache提供了一层抽象,底层可以切换不同的缓存实现,例如:
- EHCache
- Caffeine
- Redis
二、常用注解
@EnableCaching 开启缓存注解功能,通常加在启动类上
@Cacheable 在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数;如果没有缓存数据,调用方法并将方法返回值放到缓存中
@CachePut 将方法的返回值放到缓存中
@CacheEvict 将一条或多条数据从缓存中删除
三、案例
这里会用到Redis、mysql、mybatis、spring cache所以我们先在pom文件中导入依赖
<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>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.1</version>
</dependency>
记得在配置文件中将数据库、Redis连接好。
在使用Spring Cache时,需要在应用程序的启动类上添加开启缓存注解功能的注解,这是因为Spring Cache是一个基于注解的缓存框架,需要在应用程序启动时开启对这些注解的支持,以使缓存功能正常工作。
1、@CachePut
添加 @CachePut 注解,虽然像途中有好几种格式,但一般还是使用第一种就好。
将光标移动到 @CachePut 注解上,然后 Ctrl + B
点击下载
这段文本介绍的是在Spring框架中使用SpEL(Spring Expression Language)表达式来动态计算缓存存储操作的键值。默认情况下,所有方法参数都被视为键值,除非设置了自定义的键生成器。SpEL表达式在一个专用的上下文中进行评估,该上下文提供了以下元数据: - #result:指向方法调用的结果的引用。对于支持的包装器(如Optional),#result 指向实际对象,而不是包装器。 - #root.method、#root.target 和 #root.caches:分别指向方法、目标对象和受影响的缓存的引用。 - 简短的methodName 和 targetClass 快捷方式也 available。 可以通过索引访问方法参数。例如,可以通过 #root.args[1]、#p1 或 #a1 访问第二个参数。如果参数的名称可用,则也可以通过名称访问参数。
这里通过Swagger进行调式
这时数据会存储到数据库,并且会缓存到Redis
2、@Cacheable
通过接口传递来的一个值进行返回返回数据
通过Swagger调试
可以发现控制台中并没有调用数据库中的数据,而是调用的缓存中的数据。
(如果缓存中没有数据,那就会调用数据库中的数据,并将查找到得值放到缓存中)
3、@CacheEvict
通过Swagger调用
数据库中id为2的数据没了
同时缓存中 userCache::3 的数据也没了
最后如何批量删除缓存/数据库中的数据:
@CacheEvict(cacheNames = "userCache", allEntries = true)
执行后,此时数据库和缓存中的数据都没了~~~