SpringBoot Cache 入门
首先搭载开发环境,不会的可以参考笔者之前的文章SpringBoot入门
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
开始配置Cache
a. 在启动类增加一个注解@EnableCaching
@SpringBootApplication
@MapperScan("com.tanoak.mapper")
@EnableCaching
public class BootCacheApplication {
public static void main(String[] args) {
SpringApplication.run(BootCacheApplication.class, args);
}
}
b. pojo
@Data
public class Teacher {//使用Lombok注解
private Integer id;
private String lastName;
private String email;
/**
*性别 1男 0女
*/
private Integer sex;
private Integer sId;
}
c. Mapper
@Mapper
public interface TeacherMapper {
@Select("SELECT * FROM teacher WHERE id =#{id}")
Teacher getTeaById(Integer id);
@Update("UPDATE teacher SET lastName =#{lastName},email=#{email},sex=#{sex},s_id=#{sId} WHERE id=#{id}")
Integer update(Teacher teacher) ;
@Delete("DELETE FROM teacher WHERE id =#{id}")
Integer deleteById(Integer id) ;
@Insert("INSERT INTO teacher(lastName,email,sex,t_id) VALUES(#{lastName},#{email},#{sex},#{sId})")
Integer insert(Teacher teacher) ;
}
d. Service
public interface TeacherService {
/**
* 根据ID查询实体
* @param id
* @return
*/
Teacher getEmpById(Integer id) ;
Integer update(Teacher teacher) ;
Integer remove(Integer id) ;
}
//实现类
@Service
public class TeacherServiceImpl implements TeacherService {
private static final Logger logger = LoggerFactory.getLogger(TeacherServiceImpl.class);
@Resource
private TeacherMapper teacherMapper ;
@Override
@Cacheable(cacheNames = {"emp"},condition = "#id>0")
public Teacher getEmpById(Integer id) {
logger.info("进行查询实体 ID为"+id);
return teacherMapper.getTeaById(id) ;
}
@Override
public Integer update(Teacher teacher) {
logger.info("修改的实体为"+teacher.toString());
return teacherMapper.update(teacher) ;
}
@Override
public Integer remove(Integer id) {
logger.info("删除的实体 ID为"+id);
return teacherMapper.deleteById(id) ;
}
}
e. Controller
@RestController
public class TeacherController {
@Resource
private TeacherService teacherService ;
@GetMapping("/tea/{id}")
@Cacheable(cacheNames = "tea")
public Teacher getTea(@PathVariable("id")Integer id){
return teacherService.getEmpById(id) ;
}
}
然后就开启缓存,本篇文章结束!开个玩笑,在正常的开发中,我们的CRUD需要进行缓存的环节一般是在查询,更新,删除,在一些特殊的业务场景下也会对插入进行缓存,这里不做考虑。然后我们根据需求想要解决这个问题,那么Cache对应的注解就出现了
#根据方法的请求参数对其结果进行缓存
@Cacheable
-----------
#保证方法被调用,又希望结果被缓存。
@CachePut
------------
清空缓存
@CacheEvict
了解这三个注解我们来看下如何使用吧
@Cacheable
这个注解有多个属性
key 缓存的 key 支持SpEl表达式
keyGenerator 自定义Key生成策略 二选一(key or keyGenerator)
condition 符合指定条件缓存
unless 条件为true不缓存
@Override
@Cacheable(cacheNames = "tea",key = "#id",condition = "#id>1")
public Teacher getTeaById(Integer id) {
logger.info("进行查询实体 ID为"+id);
return teacherMapper.getTeaById(id) ;
}
@GetMapping("/tea/{id}")
public Teacher getTea(@PathVariable("id")Integer id){
return teacherService.getEmpById(id) ;
}
自定义KeyGenerator
public class MyKeyGenerator {
@Bean("mykeyGenerator")
public KeyGenerator keyGenerator(){
return new KeyGenerator(){
@Override
public Object generate(Object target, Method method, Object ...params){
return method.getName() +"{"+Arrays.asList(params) +"}";
}
};
}
}

@Cacheable(cacheNames = "tea",keyGenerator="mykeyGenerator")
public Teacher getTeaById(Integer id) {
logger.info("进行查询实体 ID为"+id);
return teacherMapper.getTeaById(id) ;
}
@GetMapping("/tea2/{id}")
public Teacher getTea2(@PathVariable("id")Integer id){
return teacherService.getTeaById(id) ;
}```
目前解决了查询的缓存,接下来处理更新的缓存
## @CachePut
这个注解是在方法执行完成后调用的与@Cacheable的调用顺序刚好相反
@GetMapping("/tea")
@CachePut(cacheNames = "tea")
public Teacher upTea(Teacher teacher){
teacherService.update(teacher) ;
return teacher ;
}```


可以看到,再次点击查询的时候没有发送sql语句,说明已经缓存成功
@CacheEvict
清空缓存,来认识一下
@Override
@CacheEvict(cacheNames = "tea",key = "#id")
public Integer remove(Integer id) {
logger.info("删除的实体 ID为"+id);
// return teacherMapper.deleteById(id) ;
return 1 ;
}
//然后再Controller中调用
@GetMapping("/tea3/{id}")
public String delTea(@PathVariable("id")Integer id){
teacherService.remove(id) ;
System.out.println("测试删除缓存 id为"+id);
return "OK" ;
}```
Cache的基本用法到这里就结束了,下片文章我们深入探讨它的运行机制。如理解有误,请指正
SpringBoot Cache 入门的更多相关文章
- springBoot从入门到源码分析
先分享一个springBoot搭建学习项目,和springboot多数据源项目的传送门:https://github.com/1057234721/springBoot 1. SpringBoot快速 ...
- SpringData 基于SpringBoot快速入门
SpringData 基于SpringBoot快速入门 本章通过学习SpringData 和SpringBoot 相关知识将面向服务架构(SOA)的单点登录系统(SSO)需要的代码实现.这样可以从实战 ...
- SpringBoot Docker入门,SpringBoot Docker安装
SpringBoot Docker入门,SpringBoot Docker安装 ================================ ©Copyright 蕃薯耀 2018年4月8日 ht ...
- 01-项目简介Springboot简介入门配置项目准备
总体课程主要分为4个阶段课程: ------------------------课程介绍------------------------ 01-项目简介Springboot简介入门配置项目准备02-M ...
- SPRING-BOOT系列之SpringBoot快速入门
今天 , 正式来介绍SpringBoot快速入门 : 可以去如类似 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/refer ...
- SpringBoot快速入门01--环境搭建
SpringBoot快速入门--环境搭建 1.创建web工程 1.1 创建新的工程. 1.2 选择maven工程,点击下一步. 1.3 填写groupid(maven的项目名称)和artifacti ...
- SpringBoot 初入门
SpringBoot 初入门 关于介绍什么之类的就不讲了,主要做一下学习记录. 1. 启动方式 IDEA 启动 命令行启动: mvn spring-boot:run 部署到服务器启动: 先进行打包, ...
- SpringBoot基础篇-SpringBoot快速入门
SpringBoot基础 学习目标: 能够理解Spring的优缺点 能够理解SpringBoot的特点 能够理解SpringBoot的核心功能 能够搭建SpringBoot的环境 能够完成applic ...
- Springboot快速入门篇,图文并茂
Springboot快速入门篇,图文并茂 文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star!搜索关注微信公众号 [码出Offer] 领取各种学习资料! image-20 ...
随机推荐
- 062.Python前段框架Django视图CBV
一 CBV与FBV CBV:Class Based View FBV:Function Based View 之前写过的都是基于函数的view,就叫FBV.还可以把view写成基于类的,那就是CBV. ...
- TEB 系统综合误差
TEB 系统综合误差 和森世籍 聊天得知 该TEB 包括 传感器误差 温度 系统误差等等
- 004.kubernets对于pod的简单管理
一 pod简介 1.1 介绍 Pod是K8s集群中所有业务类型的基础 Pod是在K8s集群中运行部署应用或服务的最小单元,它是可以支持多容器的. Pod的设计理念是支持多个容器在一个Pod中共享网络地 ...
- opencv——PCA(主要成分分析)数学原理推导
引言: 最近一直在学习主成分分析(PCA),所以想把最近学的一点知识整理一下,如果有不对的还请大家帮忙指正,共同学习. 首先我们知道当数据维度太大时,我们通常需要进行降维处理,降维处理的方式有很多种, ...
- unity用json和服务器数据交互
第一种类型:服务器json数据是个对象 /// <summary> /// 获取用户信息初始化信息 /// </summary> void InitUserMessage() ...
- java学习之旅2——set
var set = Collections.synchronizedSet(new HashSet<Integer>()); 可以这样来获得一个同步的集合. 对于HashSet, for循 ...
- Java枚举类与注解详解——一篇文章读懂枚举类与注解详
目录 一.枚举类 ① 自定义枚举类 ② enum关键字定义枚举类 ③ enum 枚举类的方法 ④ enum 枚举类实现接口 二.注解 ① 生成文档相关注解 ②注解在编译时进行格式检查 ③注解跟踪代码的 ...
- ubuntu设置允许root用户登录
一.允许ssh登录root用户(命令行) 1.修改root 密码,sudo passwd root 2.修改ssh配置, sudo vim /etc/ssh/shd_config,修改文件中的Perm ...
- pika详解(五)登录认证及connectionParameters
pika详解(五)登录认证及connectionParameters 本文链接:https://blog.csdn.net/comprel/article/details/94662916 版权 pi ...
- 用TVM在硬件平台上部署深度学习工作负载的端到端 IR 堆栈
用TVM在硬件平台上部署深度学习工作负载的端到端 IR 堆栈 深度学习已变得无处不在,不可或缺.这场革命的一部分是由可扩展的深度学习系统推动的,如滕索弗洛.MXNet.咖啡和皮托奇.大多数现有系统针对 ...