文章目录
- 前言
- 一、spring中如何开启缓存
-
* [1 引入redis依赖](about:blank#1_redis_14) - 二、使用步骤
-
* [1.编写示例接口](about:blank#1_53) - 总结
前言
项目中缓存技术可以说是使用范围较广的技术了,缓存的出现,解决了很多性能难题,对于整体系统的提升给出了一个很便捷的方法;合理运用缓存事半功倍,spring中其实已经帮我集成好了缓存,可以实现自动缓存,当然有些地方不适用,也确实需要手动缓存;
spring自身不提供缓存的存储实现,需要借助第三方 例如常见的 EhCache、Redis等;
本文采用 redis
1 引入redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
在yml中配置好redis
redis:
host: ***
# Redis 服务器端连接端口
port: 6379
# redis 服务器连接密码
password: *****
# 连接超时时间(毫秒)
timeout: 1000
# redis 数据库索引,默认为0
database: 6
2 启动类添加
@EnableCaching 启用缓存
@SpringBootApplication
@MapperScan("com.example.test.mapper*")
@EnableCaching // 这个
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
二、使用步骤
1.编写示例接口
代码如下:
模拟登录获取token
/**
* @Description
* 1 开启redis注解,在启动类上 增加@EnableCaching
* 2 在查询mysql数据库之前 @Cacheable cacheNames为缓存在redis中的key , key 为该方法的方法名且当版本冲突时必须加上'' 防止报错
* @Author FL
* @Date 11:15 2021/8/26
* @Param [userId]
**/
@ApiOperation(value = "/login", notes = "登录")
@RequestMapping(value = "/login")
@Cacheable(cacheNames = "user", key = "'login'")
//@CacheEvict(cacheNames = "user", key = "'login'")
//@CachePut(cacheNames = "user", key = "'login'")
public String login(Long userId) {
String token = UUID.randomUUID().toString();
UserInfo userInfo = new UserInfo(); // 模拟去数据库获取数据
System.out.println("查询");
String userJosn = JSONUtil.toJsonStr(userInfo);
return token;
}
2.测试接口
请求后,在redis中已经缓存了一份;
之后再次请求,会直接从redist中获取,而不会再去做查询
可以从控制台看到证据:
无论请求多少次,都是第一次会打印 查询, 之后不会再次打印;
3 @Cacheable
首先查询缓存中是否有数据,如果有直接返回,如果没有,查询后缓存结果,然后返回
下面介绍一下 @Cacheable 这个注解的两个属性:
1 cacheNames/value :用来指定缓存组件的名字 其实对于本文,就是redis库中的namespaces
2 key :缓存数据时使用的 key,可以用它来指定。默认是使用方法参数的值。(这个 key 你可以使用 spEL
表达式来编写)本文中是写死的,可以获取入参 #userId,就是获取的了
3 值 这里缓存的值,就是当前接口返回的数据; 本文中也就是token; 如果返回的是一个对象,也就是要缓存该对象,记得一定要实现序列化!!!
4
@CacheEvict
删除缓存的数据;
在刚刚的接口上面注释掉 @Cacheable 打开 @CacheEvict,再次调用接口; redis接的reload下!!!
4 @CachePut
首先执行方法,然后将结果缓存;这也是与 @Cacheable 最大的不同,@CachePut每次都会执行数据库的查询;然后缓存最新结果;
也就相当于更新~~
总结
相信大家对于spring中三个缓存的注解已经有了一定认识;
@Cacheable(cacheNames = “user”, key = “‘login’”)
@CacheEvict(cacheNames = “user”, key = “‘login’”)
@CachePut(cacheNames = “user”, key = “‘login’”)
不要傻傻分不清楚了~~
本文转自 jimolvxing.blog.csdn.net/article/det…,如有侵权,请联系删除。