SpringCache使用
2024-01-10 10:49:28
SpringCache使用
常用注解
注解 | 说明 |
---|---|
@EnableCaching | 开启缓存注解功能,通常加在启动类上 |
@Cacheable | 在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中 |
@CachePut | 将方法的返回值放到缓存中 |
@CacheEvict | 将一条或多条数据从缓存中删除 |
引入相关依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.3</version>
<relativePath/>
</parent>
<groupId>com.itheima</groupId>
<artifactId>springcache-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<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>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.3</version>
</plugin>
</plugins>
</build>
</project>
使用步骤
配置文件
需要在配置文件中设置相关内容,Redis地址、MySQL地址等,使用SpringCache可以将返回或者请求内容自动存入Redis
server:
port: 8888
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://XXXX:3305/springcachedemo?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: "02120212"
redis:
host: XXXX
port: 6378
password: "02120212"
database: 0
logging:
level:
com:
itheima:
mapper: debug
service: info
controller: info
开始使用
1、开启缓存
需要在启动类上加上@EnableCaching
注解
2、设置缓存
设置缓存使用@CachePut
注解。如果需要将请求的内容放入缓存可以按照以下步骤实现。
设置键的格式为参数::参数
,由于在Redis中可以设置树型结构。
关于Redis树型结构
如果需要设置Redis树型结构,可以设置键为
abc:bca:cba
这样设置在Redis中展现就像是树型,像是文件夹的目录结构。
适应不同用户的习惯,有多种方式获取参数,这里的cacheNames
设置是
// TODO 2. 设置缓存数据值
@CachePut(cacheNames = "userCache", key = "#user.id")// 格式为 userCache::abc ;key = "#user.id" 中usr与下面user对应
@CachePut(cacheNames = "userCache",key = "#result.id")// #result.id 取到返回值id 对象导航
@CachePut(cacheNames = "userCache",key = "#p0.id")// 取到第一个参数,这里没有第二个参数所以取不到
@CachePut(cacheNames = "userCache",key = "#a0.id")// 取到第一个参数,这里没有第二个参数所以取不到
@CachePut(cacheNames = "userCache",key = "#root.args[0].id")// 取到第一个参数,这里没有第二个参数所以取不到
public User save(@RequestBody User user) {
userMapper.insert(user);
return user;
}
但是这也设置在Redis中会存在有个“文件夹”没有名字,因为接受的参数是内容:内容
而在这的格式为内容::内容
所以会有一个为空
在上面示例中,想获取传入的数值可以使用,如:user
,获取里面的id可以使用user.id
以此类推
所以在上面设置中显示的格式为
userCache::id中的值
传入的值是单个
如果传入的值是一个,也可以按照这个方式去设置,效果和原理也是一样的。
@GetMapping
@Cacheable(cacheNames = "userCache", key = "#id")// TODO 3. 将key设置为 userCache::id
public User getById(Long id) {
User user = userMapper.getById(id);
return user;
}
那么在上面的示例中显示的格式为
userCache::id的值
3、清理缓存
清理缓存使用注解@CacheEvict
,使用格式为@CacheEvict(cacheNames = "userCache", key = "#id")
@DeleteMapping("/delAll")
@CacheEvict(cacheNames = "userCache", allEntries = true) // TODO 5. 清理所有数据将userCache所有都删除
public void deleteAll() {
userMapper.deleteAll();
}
上述清理格式为
userCache::id的值
如果这个值存在就会被清除
4、清理所有数据将userCache所有都删除
如果想将所有的开头为userCache
的缓存都清除可以使用@CacheEvict
,和清除单个缓存一样。
示例:@CacheEvict(cacheNames = "userCache", allEntries = true)
只需要将参数改为allEntries
并且设置为true即可
@DeleteMapping("/delAll")
@CacheEvict(cacheNames = "userCache", allEntries = true) // TODO 5. 清理所有数据将userCache所有都删除
public void deleteAll() {
userMapper.deleteAll();
}
文章来源:https://blog.csdn.net/weixin_46533577/article/details/135496231
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!