Spring Cache框架(缓存)

1、介绍:

Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单加个注解,就能实现缓存功能。它提供了一层抽象,底层可以切换不同的cache实现。具体就是通过CacheManager 接口来实现不同的缓存技术。

针对不同的混存技术需要实现不同的CacheManager:

CacheManager 描述
EhCacheCacheManager 使用EhCache作为缓存技术
GuavaCacheManager 使用Google的GuavaCache作为缓存技术
RedisCacheManager 使用Redis作为缓存技术

2、Spring Cache常用注解

注解 说明
@EnableCaching 开启缓存注解功能
@Cacheable 在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中
@CachePut 将方法的返回值放到缓存中
@CacheEvict 将一条或者多条数据从缓存中删除

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

java 复制代码
比如此处@CachePut使用例子
@CachePut(value = "name",key = "#result.id")//将方法返回值放入缓存 ,SpEL方法格式获得数据
publie User save(User user){
  userService.save(user);
  return user;
  }
 //此处value就是缓存的名称,每个缓存下面可以有多个key
 //key:缓存的key
java 复制代码
//清理指定缓存
@CacheEvict(value = "userCache",key ="#p0")//或者
@CacheEvict(value = "userCache",key ="#root.args[0]")
@CacheEvict(value = "userCache",key ="#id")
@DeleteMapping("/{id}")
public void delete(@PathVariable Long id) {
 userService.removeById(id);
 }
java 复制代码
@Cacheable(value = "userCache" ,key = "#id",condition = "#result != null")
@GetMapping("/{id}")
public User getById(@PathVariable Long id) {
User user = userService.getById(id);
//此时有缓存则直接返回数据,不会进入该方法
//当id查询为空时,也会返回null数据当做缓存,此时需要加@Cacheable中方法condition条件,返回值不为空时加入缓存
//(unless = "#result == null"),返回值为空时不缓存
 return user;
}
java 复制代码
@GetMapping("/list")
@Cacheable(value = "userCache",key = "#user.id +'_'+#user.name")
public List<User> list (User user) {
  LambdaQueryWrapper <user> queryWrapper = new LambdaQueryWrapper<>();
  queryWrapper.eq(user.getId() != null,User::getId,user.getId());
  queryWrapper.eq(user.getName() != null,User::getName,user.getName());
  List<User> list = userService.list(querryWrapper):
  return list;
}

底层基于Map来实现的,此时重启服务,缓存都会消失,下面使用Redis来做缓存技术;配置文件需要配置redis的cache同时可配置缓存有效期time-to-live。

java 复制代码
具体实现思路
1、导入Spring Cache 和 Redis 相关 maven坐标
2、在application.yml中配置缓存数据的过期时间
3、在启动类上加@EnableCaching注解,开启缓存注解功能
4、在查询方法上加入@Cacheable注解
5、在修改保存方法上加入@CacheEvict注解
相关推荐
毕设源码-邱学长10 分钟前
【开题答辩全过程】以 博物馆参观预约管理系统为例,包含答辩的问题和答案
java·eclipse
郭庆汝33 分钟前
Windows安装java流程
java·windows·android studio
Yvonne爱编码38 分钟前
后端编程开发路径:从入门到精通的系统性探索
java·前端·后端·python·sql·go
迦蓝叶1 小时前
JAiRouter 0.8.0 发布:Docker 全自动化交付 + 多架构镜像,一键上线不是梦
java·人工智能·网关·docker·ai·架构·自动化
im_AMBER1 小时前
Leetcode 18 java
java·算法·leetcode
Android技术之家1 小时前
Kotlin与Compose:Android开发的现代化变革
android·java·开发语言·kotlin
失散131 小时前
分布式专题——10.3 ShardingSphere实现原理以及内核解析
java·分布式·架构·shardingsphere·分库分表
十八旬1 小时前
【超简单】后端入门案例-基于SpringBoot+MyBatis-plus+MySQL图书管理系统
java·开发语言·idea·intellij idea·项目实战
zhz52142 小时前
Spring Boot + Redis 缓存性能优化实战:从5秒到毫秒级的性能提升
java·spring boot·redis·缓存·vue
lifallen2 小时前
Hadoop MapOutputBuffer:Map高性能核心揭秘
java·大数据·数据结构·hadoop·算法·apache